<?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>101145</bug_id>
          
          <creation_ts>2012-11-03 00:10:05 -0700</creation_ts>
          <short_desc>Renamed ...InlineMethods.h files to ...Inlines.h</short_desc>
          <delta_ts>2012-11-08 19:05:05 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>98606</dependson>
    
    <dependson>101127</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>barraclough</cc>
    
    <cc>dino</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>eric</cc>
    
    <cc>feature-media-reviews</cc>
    
    <cc>ggaren</cc>
    
    <cc>japhet</cc>
    
    <cc>levin+threading</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>757914</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2012-11-03 00:10:05 -0700</bug_when>
    <thetext>Renamed inline header files from ...InlineMethods.h to ...Inlines.h.  There are no semantic changes, only renames.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>757919</commentid>
    <comment_count>1</comment_count>
      <attachid>172212</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2012-11-03 01:02:21 -0700</bug_when>
    <thetext>Created attachment 172212
the patch.

The patch has no functionality changes.  Only renamed the relevant inline header, and fixed up all the #includes to reference the new names.  Also fixed up the #include order in 5 files to keep the style checker happy.

Going to run the patch thru the EWS bots first.  Will submit for review if it passes the builds on all bots.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>757920</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-03 01:06:10 -0700</bug_when>
    <thetext>Attachment 172212 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/API/JSObjectRef.cpp&apos;...&quot; exit_code: 1
Source/JavaScriptCore/heap/MarkStackInlines.h:40:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/JavaScriptCore/heap/MarkStackInlines.h:47:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/JavaScriptCore/runtime/JSValueInlines.h:33:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 3 in 83 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>757921</commentid>
    <comment_count>3</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2012-11-03 01:12:05 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Attachment 172212 [details] did not pass style-queue:
&gt; 
&gt; Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/API/JSObjectRef.cpp&apos;...&quot; exit_code: 1
&gt; Source/JavaScriptCore/heap/MarkStackInlines.h:40:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
&gt; Source/JavaScriptCore/heap/MarkStackInlines.h:47:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
&gt; Source/JavaScriptCore/runtime/JSValueInlines.h:33:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
&gt; Total errors found: 3 in 83 files
&gt; 
&gt; 
&gt; If any of these errors are false positives, please file a bug against check-webkit-style.

These were pre-existing conditions in the files before I renamed them.  The 2 lines in MarkStackInlines.h are just spaces in empty lines.  I will remove them before I commit.

On the other hand, JSValueInlines.h has indentation for all the inline methods in the file.  To fix this, I will have to change the indentation of the entire file.  So, I&apos;ll just leave it as is instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>758691</commentid>
    <comment_count>4</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2012-11-05 10:52:18 -0800</bug_when>
    <thetext>Will wait for http://webkit.org/b/98606 and http://webkit.org/b/101127 to minimize merge complications.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>762303</commentid>
    <comment_count>5</comment_count>
      <attachid>173144</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2012-11-08 16:24:23 -0800</bug_when>
    <thetext>Created attachment 173144
Updated patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>762323</commentid>
    <comment_count>6</comment_count>
      <attachid>173147</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2012-11-08 16:48:11 -0800</bug_when>
    <thetext>Created attachment 173147
svn up&apos;ed again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>762359</commentid>
    <comment_count>7</comment_count>
      <attachid>173157</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2012-11-08 17:23:01 -0800</bug_when>
    <thetext>Created attachment 173157
Removed file that has been obsoleted by other changes during the svn up&apos;s.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>762363</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-08 17:27:13 -0800</bug_when>
    <thetext>Attachment 173157 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/API/JSObjectRef.cpp&apos;...&quot; exit_code: 1
Source/JavaScriptCore/runtime/JSValueInlines.h:33:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 1 in 64 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>762365</commentid>
    <comment_count>9</comment_count>
      <attachid>173157</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2012-11-08 17:28:43 -0800</bug_when>
    <thetext>Comment on attachment 173157
Removed file that has been obsoleted by other changes during the svn up&apos;s.

The style error came from the file I renamed.  Will not fix it in this patch so as to keep the change minimal and restricted to this renaming task.  Ready for a review now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>762432</commentid>
    <comment_count>10</comment_count>
      <attachid>173157</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-11-08 18:51:57 -0800</bug_when>
    <thetext>Comment on attachment 173157
Removed file that has been obsoleted by other changes during the svn up&apos;s.

r=me

Please make sure to watch the builders when this lands.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>762443</commentid>
    <comment_count>11</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2012-11-08 19:05:05 -0800</bug_when>
    <thetext>Landed in r133995: &lt;http://trac.webkit.org/changeset/133995&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>172212</attachid>
            <date>2012-11-03 01:02:21 -0700</date>
            <delta_ts>2012-11-08 16:24:23 -0800</delta_ts>
            <desc>the patch.</desc>
            <filename>bug-101145.patch</filename>
            <type>text/plain</type>
            <size>281957</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTMzMzkyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcyIEBA
CisyMDEyLTExLTAzICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBS
ZW5hbWVkIC4uLklubGluZU1ldGhvZHMuaCBmaWxlcyB0byAuLi5JbmxpbmVzLmguCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDExNDUuCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBpcyBvbmx5IGEg
cmVmYWN0b3JpbmcgZWZmb3J0IHRvIHJlbmFtZSB0aGUgZmlsZXMuIFRoZXJlIGFyZSBubworICAg
ICAgICBmdW5jdGlvbmFsaXR5IGNoYW5nZXMuCisKKyAgICAgICAgKiBBUEkvSlNPYmplY3RSZWYu
Y3BwOgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogSmF2YVNjcmlw
dENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvajoKKyAgICAg
ICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuY3Bw
OgorICAgICAgICAqIGhlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwOgorICAgICAgICAqIGhlYXAv
Q29waWVkQmxvY2suaDoKKyAgICAgICAgKiBoZWFwL0NvcGllZFNwYWNlLmNwcDoKKyAgICAgICAg
KiBoZWFwL0NvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oOiBSZW1vdmVkLgorICAgICAgICAqIGhl
YXAvQ29waWVkU3BhY2VJbmxpbmVzLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0NvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oLgorICAgICAgICAqIGhlYXAvQ29weVZp
c2l0b3IuY3BwOgorICAgICAgICAqIGhlYXAvQ29weVZpc2l0b3JJbmxpbmVNZXRob2RzLmg6IFJl
bW92ZWQuCisgICAgICAgICogaGVhcC9Db3B5VmlzaXRvcklubGluZXMuaDogQ29waWVkIGZyb20g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVZpc2l0b3JJbmxpbmVNZXRob2RzLmguCisg
ICAgICAgICogaGVhcC9HQ1RocmVhZC5jcHA6CisgICAgICAgICogaGVhcC9HQ1RocmVhZFNoYXJl
ZERhdGEuY3BwOgorICAgICAgICAqIGhlYXAvSGFuZGxlU3RhY2suY3BwOgorICAgICAgICAqIGhl
YXAvSGVhcC5jcHA6CisgICAgICAgICogaGVhcC9IZWFwUm9vdFZpc2l0b3IuaDoKKyAgICAgICAg
KiBoZWFwL01hcmtTdGFjay5jcHA6CisgICAgICAgICogaGVhcC9NYXJrU3RhY2tJbmxpbmVNZXRo
b2RzLmg6IFJlbW92ZWQuCisgICAgICAgICogaGVhcC9NYXJrU3RhY2tJbmxpbmVzLmg6IENvcGll
ZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFja0lubGluZU1ldGhvZHMu
aC4KKyAgICAgICAgKiBoZWFwL1Nsb3RWaXNpdG9yLmNwcDoKKyAgICAgICAgKiBoZWFwL1Nsb3RW
aXNpdG9yLmg6CisgICAgICAgICogaGVhcC9TbG90VmlzaXRvcklubGluZU1ldGhvZHMuaDogUmVt
b3ZlZC4KKyAgICAgICAgKiBoZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oOiBDb3BpZWQgZnJvbSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklubGluZU1ldGhvZHMuaC4KKyAg
ICAgICAgKiBqaXQvSG9zdENhbGxSZXR1cm5WYWx1ZS5jcHA6CisgICAgICAgICogaml0L0pJVC5j
cHA6CisgICAgICAgICogaml0L0pJVEFyaXRobWV0aWMuY3BwOgorICAgICAgICAqIGppdC9KSVRB
cml0aG1ldGljMzJfNjQuY3BwOgorICAgICAgICAqIGppdC9KSVRDYWxsLmNwcDoKKyAgICAgICAg
KiBqaXQvSklUQ2FsbDMyXzY0LmNwcDoKKyAgICAgICAgKiBqaXQvSklUSW5saW5lTWV0aG9kcy5o
OiBSZW1vdmVkLgorICAgICAgICAqIGppdC9KSVRJbmxpbmVzLmg6IENvcGllZCBmcm9tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lTWV0aG9kcy5oLgorICAgICAgICAqIGppdC9K
SVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKiBqaXQvSklUT3Bjb2RlczMyXzY0LmNwcDoKKyAgICAg
ICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0
eUFjY2VzczMyXzY0LmNwcDoKKyAgICAgICAgKiBqc2MuY3BwOgorICAgICAgICAqIHJ1bnRpbWUv
QXJyYXlDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgICogcnVudGltZS9BcnJheVByb3RvdHlwZS5j
cHA6CisgICAgICAgICogcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmg6IFJlbW92ZWQu
CisgICAgICAgICogcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVzLmg6IENvcGllZCBmcm9tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGluZU1ldGhvZHMuaC4KKyAgICAg
ICAgKiBydW50aW1lL0luZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oOiBSZW1vdmVkLgorICAg
ICAgICAqIHJ1bnRpbWUvSW5kZXhpbmdIZWFkZXJJbmxpbmVzLmg6IENvcGllZCBmcm9tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oLgor
ICAgICAgICAqIHJ1bnRpbWUvSlNBY3RpdmF0aW9uLmg6CisgICAgICAgICogcnVudGltZS9KU0Fy
cmF5LmNwcDoKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuaDoKKyAgICAgICAgKiBydW50aW1l
L0pTQ2VsbC5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuY3BwOgorICAgICAgICAqIHJ1
bnRpbWUvSlNWYWx1ZUlubGluZU1ldGhvZHMuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBydW50aW1l
L0pTVmFsdWVJbmxpbmVzLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTVmFsdWVJbmxpbmVNZXRob2RzLmguCisgICAgICAgICogcnVudGltZS9MaXRlcmFsUGFy
c2VyLmNwcDoKKyAgICAgICAgKiBydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmNwcDoKKyAgICAg
ICAgKiBydW50aW1lL09wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cE1hdGNo
ZXNBcnJheS5jcHA6CisgICAgICAgICogcnVudGltZS9SZWdFeHBPYmplY3QuY3BwOgorICAgICAg
ICAqIHJ1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcDoKKwogMjAxMi0xMS0wMiAgRmlsaXAgUGl6
bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIExMSW50IDMyLWJpdCBwdXRfYnlfdmFs
IEFycmF5U3RvcmFnZSBjYXNlIHNob3VsZCB1c2UgdGhlIHJpZ2h0IHJlZ2lzdGVyICh0Mywgbm90
IHQyKSBmb3IgdGhlIGluZGV4IGluIHRoZSBwdWJsaWNMZW5ndGggdXBkYXRpbmcgcGF0aApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDEz
MzM5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNTYsOSArMjU2LDkgQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBc
CiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkQmxvY2suaCBcCiAJU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2UuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9Db3BpZWRTcGFjZS5oIFwKLQlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3Bp
ZWRTcGFjZUlubGluZU1ldGhvZHMuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29w
aWVkU3BhY2VJbmxpbmVzLmggXAogICAgIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlW
aXNpdG9yLmggXAotICAgIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlWaXNpdG9ySW5s
aW5lTWV0aG9kcy5oIFwKKyAgICBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5VmlzaXRv
cklubGluZXMuaCBcCiAgICAgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVZpc2l0b3Iu
Y3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9DYXJkU2V0LmggXAogCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmNwcCBcCkBAIC0yNzYsNyArMjc2
LDcgQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSW5jcmVtZW50YWxTd2VlcGVyLmNwcCBcCiAgICAgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvU2xvdFZpc2l0b3IuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90
VmlzaXRvci5oIFwKLQlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklubGlu
ZU1ldGhvZHMuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxp
bmVzLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hhbmRsZVN0YWNrLmNwcCBcCiAJ
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlU3RhY2suaCBcCiAJU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGFuZGxlVHlwZXMuaCBcCkBAIC0yOTksNyArMjk5LDcgQEAgamF2YXNj
cmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFjaGlu
ZVN0YWNrTWFya2VyLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFjay5j
cHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFjay5oIFwKLSAgICBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2tJbmxpbmVNZXRob2RzLmggXAorICAgIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFja0lubGluZXMuaCBcCiAJU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcFJvb3RWaXNpdG9yLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtlZEFsbG9jYXRvci5oIFwKQEAgLTQwMCw3ICs0MDAsNyBAQCBqYXZhc2NyaXB0Y29y
ZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oIFwKIAlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwIFwKIAlTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuaCBcCi0JU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRJbmxpbmVNZXRob2RzLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5s
aW5lcy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAg
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAgXAogCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAgXApAQCAtNDgyLDcg
KzQ4Miw3IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0Jvb2xlYW5PYmplY3QuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQm9vbGVhblByb3RvdHlwZS5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0Jvb2xlYW5Qcm90b3R5cGUuaCBcCi0JU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
QnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9CdXR0ZXJmbHlJbmxpbmVzLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1
dHRlcmZseS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUcmFuc2Nl
bmRlbnRhbEZ1bmN0aW9uLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhbGxE
YXRhLmNwcCBcCkBAIC01MjgsNyArNTI4LDcgQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBc
CiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmggXAogCVNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lkZW50aWZpZXIuY3BwIFwKIAlTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVyLmggXAotCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0luZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oIFwKKwlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlcklubGluZXMuaCBcCiAJU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXIuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW5kZXhpbmdUeXBlLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW5kZXhpbmdUeXBlLmggXApAQCAtNTg5LDcgKzU4OSw3IEBAIGphdmFzY3JpcHRjb3JlX3Nv
dXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZUluZm8uaCBc
CiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5jcHAgXAogCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFsdWUuaCBcCi0JU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNWYWx1ZUlubGluZU1ldGhvZHMuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNWYWx1ZUlubGluZXMuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNWYXJpYWJsZU9iamVjdC5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTVmFyaWFibGVPYmplY3QuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNX
aXRoU2NvcGUuaCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkocmV2aXNpb24gMTMzMzkyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDEw
ICsyMiwxMCBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKLSNpbmNsdWRlICJCdXR0ZXJmbHlJ
bmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lcy5oIgogI2luY2x1ZGUg
IkJ5dGVjb2RlR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiQ29tcGxldGlvbi5oIgotI2luY2x1ZGUg
IkNvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5l
cy5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkhlbHBlcnMuaCIKICNpbmNsdWRlICJIZWFwU3RhdGlz
dGljcy5oIgogI2luY2x1ZGUgIkluaXRpYWxpemVUaHJlYWRpbmcuaCIKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNPYmplY3RSZWYuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNPYmplY3RSZWYuY3BwCShyZXZpc2lvbiAxMzMzOTIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTT2JqZWN0UmVmLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjksOSArMjksOSBAQAogI2luY2x1ZGUgIkpTT2JqZWN0UmVmUHJpdmF0ZS5oIgogCiAjaW5j
bHVkZSAiQVBJQ2FzdC5oIgotI2luY2x1ZGUgIkJ1dHRlcmZseUlubGluZU1ldGhvZHMuaCIKKyNp
bmNsdWRlICJCdXR0ZXJmbHlJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCi0jaW5j
bHVkZSAiQ29waWVkU3BhY2VJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiQ29waWVkU3BhY2VJ
bmxpbmVzLmgiCiAjaW5jbHVkZSAiRGF0ZUNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiRXJyb3JD
b25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkZ1bmN0aW9uQ29uc3RydWN0b3IuaCIKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNw
cm9qCShyZXZpc2lvbiAxMzMzOTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtNTM4LDcgKzUzOCw3IEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUK
LQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHJ1bnRpbWVcQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5o
IgorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccnVudGltZVxCdXR0ZXJmbHlJbmxpbmVzLmgiCiAJ
CQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKQEAgLTU0Niw3ICs1NDYsNyBAQAogCQkJCT4KIAkJ
CTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxydW50aW1lXEluZGV4
aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccnVudGlt
ZVxJbmRleGluZ0hlYWRlcklubGluZXMuaCIKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQpA
QCAtMTAwMiw3ICsxMDAyLDcgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJl
bGF0aXZlUGF0aD0iLi5cLi5ccnVudGltZVxKU1ZhbHVlSW5saW5lTWV0aG9kcy5oIgorCQkJCVJl
bGF0aXZlUGF0aD0iLi5cLi5ccnVudGltZVxKU1ZhbHVlSW5saW5lcy5oIgogCQkJCT4KIAkJCTwv
RmlsZT4KIAkJCTxGaWxlCkBAIC0xOTc4LDcgKzE5NzgsNyBAQAogCQkJCT4KIAkJCTwvRmlsZT4K
IAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxqaXRcSklUSW5saW5lTWV0aG9kcy5o
IgorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5caml0XEpJVElubGluZXMuaCIKIAkJCQk+CiAJCQk8
L0ZpbGU+CiAJCQk8RmlsZQpAQCAtMjM1MCw3ICsyMzUwLDcgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+
CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5caGVhcFxDb3BpZWRTcGFjZUlubGlu
ZU1ldGhvZHMuaCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGhlYXBcQ29waWVkU3BhY2VJbmxp
bmVzLmgiCiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKQEAgLTIzNjIsNyArMjM2Miw3IEBA
CiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGhl
YXBcQ29weVZpc2l0b3JJbmxpbmVNZXRob2RzLmgiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxo
ZWFwXENvcHlWaXNpdG9ySW5saW5lcy5oIgogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCkBA
IC0yNTUwLDcgKzI1NTAsNyBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVs
YXRpdmVQYXRoPSIuLlwuLlxoZWFwXE1hcmtTdGFja0lubGluZU1ldGhvZHMuaCIKKwkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXC4uXGhlYXBcTWFya1N0YWNrSW5saW5lcy5oIgogCQkJCT4KIAkJCTwvRmls
ZT4KIAkJCTxGaWxlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24g
MTMzMzkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE5Nyw5ICsxOTcsOSBAQAogCQkw
RkI3RjM5NTE1RUQ4RTQ2MDBGMTY3QjIgLyogQXJyYXlDb252ZW50aW9ucy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCN0YzODkxNUVEOEUzODAwRjE2
N0IyIC8qIEFycmF5Q29udmVudGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkwRkI3RjM5NjE1RUQ4RTQ2MDBGMTY3QjIgLyogQXJyYXlTdG9y
YWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI3
RjM4QTE1RUQ4RTM4MDBGMTY3QjIgLyogQXJyYXlTdG9yYWdlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZCN0YzOTcxNUVEOEU0NjAwRjE2N0Iy
IC8qIEJ1dHRlcmZseS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZCN0YzOEIxNUVEOEUzODAwRjE2N0IyIC8qIEJ1dHRlcmZseS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTBGQjdGMzk4MTVFRDhFNDYw
MEYxNjdCMiAvKiBCdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI3RjM4QzE1RUQ4RTM4MDBGMTY3QjIgLyogQnV0
dGVyZmx5SW5saW5lTWV0aG9kcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTBGQjdGMzk4MTVFRDhFNDYwMEYxNjdCMiAvKiBCdXR0ZXJmbHlJbmxp
bmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI3
RjM4QzE1RUQ4RTM4MDBGMTY3QjIgLyogQnV0dGVyZmx5SW5saW5lcy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQjdGMzk5MTVFRDhFNDYwMEYx
NjdCMiAvKiBJbmRleGluZ0hlYWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZCN0YzOEQxNUVEOEUzODAwRjE2N0IyIC8qIEluZGV4aW5nSGVhZGVy
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEZC
N0YzOUExNUVEOEU0NjAwRjE2N0IyIC8qIEluZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCN0YzOEUxNUVE
OEUzODAwRjE2N0IyIC8qIEluZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGQjdGMzlBMTVFRDhFNDYw
MEYxNjdCMiAvKiBJbmRleGluZ0hlYWRlcklubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjdGMzhFMTVFRDhFMzgwMEYxNjdCMiAvKiBJbmRl
eGluZ0hlYWRlcklubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkwRkI3RjM5QjE1RUQ4RTQ2MDBGMTY3QjIgLyogSW5kZXhpbmdUeXBlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI3RjM4RjE1
RUQ4RTM4MDBGMTY3QjIgLyogSW5kZXhpbmdUeXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZCN0YzOUMxNUVEOEU0NjAwRjE2N0IyIC8qIFBy
b3BlcnR5U3RvcmFnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZCN0YzOTAxNUVEOEUzODAwRjE2N0IyIC8qIFByb3BlcnR5U3RvcmFnZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQjdGMzlEMTVF
RDhFNDYwMEYxNjdCMiAvKiBSZWplY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGQjdGMzkxMTVFRDhFMzgwMEYxNjdCMiAvKiBSZWplY3QuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNDU0LDcgKzQ1
NCw3IEBACiAJCTg2M0M2RDlDMTUyMTExMUEwMDU4NUU0RSAvKiBZYXJyQ2Fub25pY2FsaXplVUNT
Mi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NjND
NkQ5ODE1MjExMTEyMDA1ODVFNEUgLyogWWFyckNhbm9uaWNhbGl6ZVVDUzIuY3BwICovOyB9Owog
CQk4NjQyQzUxMDE1MUMwNkE5MDA0NkQ0RUYgLyogUmVnRXhwQ2FjaGVkUmVzdWx0LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2Rjc1RUZCMTUxQzA2
MkYwMDdDOUJBMyAvKiBSZWdFeHBDYWNoZWRSZXN1bHQuY3BwICovOyB9OwogCQk4NjQyQzUxMjE1
MUMwODNEMDA0NkQ0RUYgLyogUmVnRXhwTWF0Y2hlc0FycmF5LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2Rjc1RUZEMTUxQzA2MkYwMDdDOUJBMyAv
KiBSZWdFeHBNYXRjaGVzQXJyYXkuY3BwICovOyB9OwotCQk4NjVBMzBGMTEzNTAwN0UxMDBDREI0
OUUgLyogSlNWYWx1ZUlubGluZU1ldGhvZHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDg2NUEzMEYwMTM1MDA3RTEwMENEQjQ5RSAvKiBKU1ZhbHVlSW5s
aW5lTWV0aG9kcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCTg2NUEzMEYxMTM1MDA3RTEwMENEQjQ5RSAvKiBKU1ZhbHVlSW5saW5lcy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODY1QTMwRjAxMzUwMDdF
MTAwQ0RCNDlFIC8qIEpTVmFsdWVJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJODY1RjQwODgxMEU3RDU2MzAwOTQ3MzYxIC8qIEFQSVNo
aW1zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NjVG
NDA4NzEwRTdENTYzMDA5NDczNjEgLyogQVBJU2hpbXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk4NjY3MzlEMjEzQkZERTcxMDAyM0Q4N0MgLyog
QmlnSW50ZWdlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gODY2NzM5RDAxM0JGREU3MTAwMjNEODdDIC8qIEJpZ0ludGVnZXIuaCAqLzsgfTsKIAkJODY2
NzM5RDMxM0JGREU3MTAwMjNEODdDIC8qIFVpbnQxNldpdGhGcmFjdGlvbi5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODY2NzM5RDExM0JGREU3MTAwMjNE
ODdDIC8qIFVpbnQxNldpdGhGcmFjdGlvbi5oICovOyB9OwpAQCAtNDkwLDcgKzQ5MCw3IEBACiAJ
CTg2QzU2OEUyMTFBMjEzRUUwMDA3RjdGMCAvKiBNSVBTQXNzZW1ibGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkM1NjhERjExQTIxM0VFMDAwN0Y3
RjAgLyogTUlQU0Fzc2VtYmxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTg2Q0EwMzJFMTAzOEU4NDQwMDI4QTYwOSAvKiBFeGVjdXRhYmxlLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2Q0EwMzJE
MTAzOEU4NDQwMDI4QTYwOSAvKiBFeGVjdXRhYmxlLmNwcCAqLzsgfTsKIAkJODZDQUZFRTMxMDM1
RERFNjAwMjhBNjA5IC8qIEV4ZWN1dGFibGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDg2Q0FGRUUyMTAzNURERTYwMDI4QTYwOSAvKiBFeGVjdXRhYmxl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJODZD
Qzg1QTEwRUU3OUE0NzAwMjg4NjgyIC8qIEpJVElubGluZU1ldGhvZHMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2Q0M4NUEwMEVFNzlBNDcwMDI4ODY4
MiAvKiBKSVRJbmxpbmVNZXRob2RzLmggKi87IH07CisJCTg2Q0M4NUExMEVFNzlBNDcwMDI4ODY4
MiAvKiBKSVRJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA4NkNDODVBMDBFRTc5QTQ3MDAyODg2ODIgLyogSklUSW5saW5lcy5oICovOyB9Owog
CQk4NkNDODVBMzBFRTc5Qjc0MDAyODg2ODIgLyogSklUQ2FsbC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkNDODVBMjBFRTc5Qjc0MDAyODg2ODIg
LyogSklUQ2FsbC5jcHAgKi87IH07CiAJCTg2Q0M4NUM0MEVFN0E4OTQwMDI4ODY4MiAvKiBKSVRQ
cm9wZXJ0eUFjY2Vzcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA4NkNDODVDMzBFRTdBODk0MDAyODg2ODIgLyogSklUUHJvcGVydHlBY2Nlc3MuY3Bw
ICovOyB9OwogCQk4NkNDRUZERTBGNDEzRjg5MDBGRDdGOUUgLyogSklUQ29kZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZDQ0VGREQwRjQxM0Y4OTAw
RkQ3RjlFIC8qIEpJVENvZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwpAQCAtNzEwLDExICs3MTAsMTEgQEAKIAkJQkNGRDhDOTMwRUVCMkVFNzAwMjgz
ODQ4IC8qIEp1bXBUYWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQkNGRDhDOTEwRUVCMkVFNzAwMjgzODQ4IC8qIEp1bXBUYWJsZS5oICovOyB9Owog
CQlDMjExMjJFMTE1REQ5QUIzMDA3OTBFM0EgLyogR0NUaHJlYWRTaGFyZWREYXRhLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMTEyMkRFMTVERDlB
QjMwMDc5MEUzQSAvKiBHQ1RocmVhZFNoYXJlZERhdGEuY3BwICovOyB9OwogCQlDMjExMjJFMjE1
REQ5QUIzMDA3OTBFM0EgLyogR0NUaHJlYWRTaGFyZWREYXRhLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjExMjJERjE1REQ5QUIzMDA3OTBFM0EgLyog
R0NUaHJlYWRTaGFyZWREYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKLQkJQzIxMTIyRTMxNUREOUFCMzAwNzkwRTNBIC8qIE1hcmtTdGFja0lubGlu
ZU1ldGhvZHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEMyMTEyMkUwMTVERDlBQjMwMDc5MEUzQSAvKiBNYXJrU3RhY2tJbmxpbmVNZXRob2RzLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQzIxNjBGRTcx
NUY3RTk1RTAwOTQyREZDIC8qIFNsb3RWaXNpdG9ySW5saW5lTWV0aG9kcy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDQjQwODUxNUMwQTNDMzAwNDg5
MzJCIC8qIFNsb3RWaXNpdG9ySW5saW5lTWV0aG9kcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUMyMTEyMkUzMTVERDlBQjMwMDc5MEUzQSAvKiBN
YXJrU3RhY2tJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBDMjExMjJFMDE1REQ5QUIzMDA3OTBFM0EgLyogTWFya1N0YWNrSW5saW5lcy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUMyMTYwRkU3
MTVGN0U5NUUwMDk0MkRGQyAvKiBTbG90VmlzaXRvcklubGluZXMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQ0I0MDg1MTVDMEEzQzMwMDQ4OTMyQiAv
KiBTbG90VmlzaXRvcklubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQlDMjIzOUQxNzE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3Iu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzIyMzlE
MTIxNjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNpdG9yLmNwcCAqLzsgfTsKIAkJQzIyMzlEMTgx
NjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNpdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjIzOUQxMzE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZp
c2l0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owot
CQlDMjIzOUQxOTE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3JJbmxpbmVNZXRob2RzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjIzOUQxNDE2
MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3JJbmxpbmVNZXRob2RzLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQzIyMzlEMTkxNjI2MkJERDAw
NUFDNUZEIC8qIENvcHlWaXNpdG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQzIyMzlEMTQxNjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNp
dG9ySW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCUMyMjM5RDFBMTYyNjJCREQwMDVBQzVGRCAvKiBHQ1RocmVhZC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjIzOUQxNTE2MjYyQkREMDA1
QUM1RkQgLyogR0NUaHJlYWQuY3BwICovOyB9OwogCQlDMjIzOUQxQjE2MjYyQkREMDA1QUM1RkQg
LyogR0NUaHJlYWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEMyMjM5RDE2MTYyNjJCREQwMDVBQzVGRCAvKiBHQ1RocmVhZC5oICovOyB9OwogCQlDMjI1
NDk0MzE1RjdEQkFBMDA2NUU4OTggLyogU2xvdFZpc2l0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzIyNTQ5NDIxNUY3REJBQTAwNjVFODk4IC8q
IFNsb3RWaXNpdG9yLmNwcCAqLzsgfTsKQEAgLTcyNyw3ICs3MjcsNyBAQAogCQlDMkE3RjY4ODE2
MDQzMkQ0MDBGNzZCOTggLyogSlNEZXN0cnVjdGlibGVPYmplY3QuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyQTdGNjg3MTYwNDMyRDQwMEY3NkI5OCAv
KiBKU0Rlc3RydWN0aWJsZU9iamVjdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCUMyQjkxNkMyMTREQTAxNEUwMENCQUM4NiAvKiBNYXJrZWRBbGxv
Y2F0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMy
QjkxNkMxMTREQTAxNEUwMENCQUM4NiAvKiBNYXJrZWRBbGxvY2F0b3IuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlDMkI5MTZDNTE0REEwNDBDMDBD
QkFDODYgLyogTWFya2VkQWxsb2NhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEMyQjkxNkM0MTREQTA0MEMwMENCQUM4NiAvKiBNYXJrZWRBbGxv
Y2F0b3IuY3BwICovOyB9OwotCQlDMkM4RDAyRDE0QTNDNkUwMDA1NzhFNjUgLyogQ29waWVkU3Bh
Y2VJbmxpbmVNZXRob2RzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBDMkM4RDAyQjE0QTNDNkIyMDA1NzhFNjUgLyogQ29waWVkU3BhY2VJbmxpbmVNZXRo
b2RzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
QzJDOEQwMkQxNEEzQzZFMDAwNTc4RTY1IC8qIENvcGllZFNwYWNlSW5saW5lcy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJDOEQwMkIxNEEzQzZCMjAw
NTc4RTY1IC8qIENvcGllZFNwYWNlSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCUMyQzhEMDMwMTRBM0NFRkMwMDU3OEU2NSAvKiBDb3Bp
ZWRCbG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QzJDOEQwMkUxNEEzQ0VGQzAwNTc4RTY1IC8qIENvcGllZEJsb2NrLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQzJDOEQwMzExNEEzQ0VGQzAwNTc4
RTY1IC8qIEhlYXBCbG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQzJDOEQwMkYxNEEzQ0VGQzAwNTc4RTY1IC8qIEhlYXBCbG9jay5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUMyRDU4QzM0MTU5MTJG
RUUwMDIxQTg0NCAvKiBHQ0FjdGl2aXR5Q2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJENThDMzMxNTkxMkZFRTAwMjFBODQ0IC8qIEdD
QWN0aXZpdHlDYWxsYmFjay5jcHAgKi87IH07CkBAIC05ODIsOSArOTgyLDkgQEAKIAkJMEZCN0Yz
ODkxNUVEOEUzODAwRjE2N0IyIC8qIEFycmF5Q29udmVudGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQXJyYXlDb252ZW50aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRkI3RjM4QTE1RUQ4RTM4MDBGMTY3QjIgLyogQXJyYXlTdG9yYWdlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFycmF5U3RvcmFnZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRkI3RjM4QjE1RUQ4RTM4MDBGMTY3QjIgLyogQnV0dGVyZmx5
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ1dHRlcmZseS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQkwRkI3RjM4QzE1RUQ4RTM4MDBGMTY3QjIgLyogQnV0dGVy
Zmx5SW5saW5lTWV0aG9kcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCdXR0
ZXJmbHlJbmxpbmVNZXRob2RzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQjdG
MzhDMTVFRDhFMzgwMEYxNjdCMiAvKiBCdXR0ZXJmbHlJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEJ1dHRlcmZseUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEZCN0YzOEQxNUVEOEUzODAwRjE2N0IyIC8qIEluZGV4aW5nSGVhZGVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluZGV4aW5nSGVhZGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGQjdGMzhFMTVFRDhFMzgwMEYxNjdCMiAvKiBJbmRl
eGluZ0hlYWRlcklubGluZU1ldGhvZHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGQjdGMzhFMTVFRDhFMzgwMEYxNjdCMiAvKiBJbmRleGluZ0hlYWRlcklubGluZXMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5kZXhpbmdIZWFkZXJJbmxpbmVz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjdGMzhGMTVFRDhFMzgwMEYxNjdC
MiAvKiBJbmRleGluZ1R5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5k
ZXhpbmdUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjdGMzkwMTVFRDhF
MzgwMEYxNjdCMiAvKiBQcm9wZXJ0eVN0b3JhZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUHJvcGVydHlTdG9yYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGQjdGMzkxMTVFRDhFMzgwMEYxNjdCMiAvKiBSZWplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUmVqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0x
MDA5LDcgKzEwMDksNyBAQAogCQkwRkM4MTUwOTE0MDQzQkQyMDBDRkE2MDMgLyogV3JpdGVCYXJy
aWVyU3VwcG9ydC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXcml0ZUJhcnJp
ZXJTdXBwb3J0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzgxNTEyMTQwNTEx
ODYwMENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBWVGFibGVTcGVjdHJ1bS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGQzgxNTE0MTQwNTExOEQwMENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWVGFibGVTcGVjdHJ1bS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQkwRkNCNDA4NTE1QzBBM0MzMDA0ODkzMkIgLyogU2xvdFZpc2l0
b3JJbmxpbmVNZXRob2RzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNsb3RW
aXNpdG9ySW5saW5lTWV0aG9kcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkNC
NDA4NTE1QzBBM0MzMDA0ODkzMkIgLyogU2xvdFZpc2l0b3JJbmxpbmVzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNsb3RWaXNpdG9ySW5saW5lcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRkQzQzgyMDE0MTE1Q0Y4MDBGRDgxQ0IgLyogREZHRHJpdmVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0RyaXZlci5jcHA7IHBh
dGggPSBkZmcvREZHRHJpdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZE
M0M4MjIxNDExNUQwRTAwRkQ4MUNCIC8qIERGR0RyaXZlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBERkdEcml2ZXIuaDsgcGF0aCA9IGRmZy9ERkdEcml2ZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEODFBQ0YxNTRGQjRFQjAwOTgzRTcyIC8qIERGR0Rv
bWluYXRvcnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHRG9t
aW5hdG9ycy5jcHA7IHBhdGggPSBkZmcvREZHRG9taW5hdG9ycy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0xMjI5LDcgKzEyMjksNyBAQAogCQk4NjNDNkQ5ODE1MjExMTEyMDA1
ODVFNEUgLyogWWFyckNhbm9uaWNhbGl6ZVVDUzIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gWWFyckNhbm9uaWNhbGl6ZVVDUzIuY3BwOyBwYXRoID0geWFyci9ZYXJy
Q2Fub25pY2FsaXplVUNTMi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2M0M2
RDk5MTUyMTExMTIwMDU4NUU0RSAvKiBZYXJyQ2Fub25pY2FsaXplVUNTMi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBZYXJyQ2Fub25pY2FsaXplVUNTMi5oOyBwYXRoID0geWFy
ci9ZYXJyQ2Fub25pY2FsaXplVUNTMi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4
NjNDNkQ5QTE1MjExMTEyMDA1ODVFNEUgLyogWWFyckNhbm9uaWNhbGl6ZVVDUzIuanMgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IG5hbWUgPSBZYXJyQ2Fub25pY2FsaXplVUNTMi5q
czsgcGF0aCA9IHlhcnIvWWFyckNhbm9uaWNhbGl6ZVVDUzIuanM7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTg2NUEzMEYwMTM1MDA3RTEwMENEQjQ5RSAvKiBKU1ZhbHVlSW5saW5lTWV0
aG9kcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1ZhbHVlSW5saW5lTWV0
aG9kcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4NjVBMzBGMDEzNTAwN0UxMDBD
REI0OUUgLyogSlNWYWx1ZUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSlNWYWx1ZUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODY1RjQw
ODcxMEU3RDU2MzAwOTQ3MzYxIC8qIEFQSVNoaW1zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEFQSVNoaW1zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2Njcz
OUQwMTNCRkRFNzEwMDIzRDg3QyAvKiBCaWdJbnRlZ2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEJpZ0ludGVnZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
ODY2NzM5RDExM0JGREU3MTAwMjNEODdDIC8qIFVpbnQxNldpdGhGcmFjdGlvbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVaW50MTZXaXRoRnJhY3Rpb24uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyNzEsNyArMTI3MSw3IEBACiAJCTg2QzU2OERGMTFBMjEz
RUUwMDA3RjdGMCAvKiBNSVBTQXNzZW1ibGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IE1JUFNBc3NlbWJsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZD
QTAzMkQxMDM4RTg0NDAwMjhBNjA5IC8qIEV4ZWN1dGFibGUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gRXhlY3V0YWJsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTg2Q0FGRUUyMTAzNURERTYwMDI4QTYwOSAvKiBFeGVjdXRhYmxlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4ZWN1dGFibGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJODZDQzg1QTAwRUU3OUE0NzAwMjg4NjgyIC8qIEpJVElubGluZU1ldGhv
ZHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUSW5saW5lTWV0aG9kcy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4NkNDODVBMDBFRTc5QTQ3MDAyODg2ODIg
LyogSklUSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKSVRJbmxp
bmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2Q0M4NUEyMEVFNzlCNzQwMDI4
ODY4MiAvKiBKSVRDYWxsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpJVENhbGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkNDODVDMzBFRTdB
ODk0MDAyODg2ODIgLyogSklUUHJvcGVydHlBY2Nlc3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSklUUHJvcGVydHlBY2Nlc3MuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk4NkNDRUZERDBGNDEzRjg5MDBGRDdGOUUgLyogSklUQ29kZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKSVRDb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xNDk5LDEwICsxNDk5LDEwIEBACiAJCUJDRkQ4QzkxMEVFQjJFRTcwMDI4
Mzg0OCAvKiBKdW1wVGFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSnVt
cFRhYmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMTEyMkRFMTVERDlBQjMw
MDc5MEUzQSAvKiBHQ1RocmVhZFNoYXJlZERhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gR0NUaHJlYWRTaGFyZWREYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQzIxMTIyREYxNUREOUFCMzAwNzkwRTNBIC8qIEdDVGhyZWFkU2hhcmVkRGF0
YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHQ1RocmVhZFNoYXJlZERhdGEu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzIxMTIyRTAxNUREOUFCMzAwNzkwRTNB
IC8qIE1hcmtTdGFja0lubGluZU1ldGhvZHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTWFya1N0YWNrSW5saW5lTWV0aG9kcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlDMjExMjJFMDE1REQ5QUIzMDA3OTBFM0EgLyogTWFya1N0YWNrSW5saW5lcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYXJrU3RhY2tJbmxpbmVzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMjM5RDEyMTYyNjJCREQwMDVBQzVGRCAvKiBDb3B5Vmlz
aXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb3B5VmlzaXRv
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMjM5RDEzMTYyNjJCREQwMDVB
QzVGRCAvKiBDb3B5VmlzaXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBD
b3B5VmlzaXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDMjIzOUQxNDE2MjYy
QkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3JJbmxpbmVNZXRob2RzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IENvcHlWaXNpdG9ySW5saW5lTWV0aG9kcy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlDMjIzOUQxNDE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0
b3JJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvcHlWaXNpdG9y
SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjIzOUQxNTE2MjYyQkRE
MDA1QUM1RkQgLyogR0NUaHJlYWQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gR0NUaHJlYWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjIzOUQx
NjE2MjYyQkREMDA1QUM1RkQgLyogR0NUaHJlYWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gR0NUaHJlYWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIyNTQ5
NDIxNUY3REJBQTAwNjVFODk4IC8qIFNsb3RWaXNpdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFNsb3RWaXNpdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTE1MTQsNyArMTUxNCw3IEBACiAJCUMyQTdGNjg3MTYwNDMyRDQwMEY3NkI5OCAv
KiBKU0Rlc3RydWN0aWJsZU9iamVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKU0Rlc3RydWN0aWJsZU9iamVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlD
MkI5MTZDMTE0REEwMTRFMDBDQkFDODYgLyogTWFya2VkQWxsb2NhdG9yLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hcmtlZEFsbG9jYXRvci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlDMkI5MTZDNDE0REEwNDBDMDBDQkFDODYgLyogTWFya2VkQWxsb2NhdG9y
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hcmtlZEFsbG9jYXRv
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUMyQzhEMDJCMTRBM0M2QjIwMDU3
OEU2NSAvKiBDb3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQ29waWVkU3BhY2VJbmxpbmVNZXRob2RzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUMyQzhEMDJCMTRBM0M2QjIwMDU3OEU2NSAvKiBDb3BpZWRTcGFjZUlubGlu
ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29waWVkU3BhY2VJbmxpbmVz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyQzhEMDJFMTRBM0NFRkMwMDU3OEU2
NSAvKiBDb3BpZWRCbG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb3Bp
ZWRCbG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMkM4RDAyRjE0QTNDRUZD
MDA1NzhFNjUgLyogSGVhcEJsb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEhlYXBCbG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMkQ1OEMzMzE1OTEy
RkVFMDAyMUE4NDQgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEdDQWN0aXZpdHlDYWxsYmFjay5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0xODE0LDcgKzE4MTQsNyBAQAogCQkJCTBGMjFDMjY2MTRCRTVGNUUw
MEFEQzY0QiAvKiBKSVREcml2ZXIuaCAqLywKIAkJCQkwRjQ2ODA3RjE0QkE1NzI3MDBCRkUyNzIg
LyogSklURXhjZXB0aW9ucy5jcHAgKi8sCiAJCQkJMEY0NjgwODAxNEJBNTcyNzAwQkZFMjcyIC8q
IEpJVEV4Y2VwdGlvbnMuaCAqLywKLQkJCQk4NkNDODVBMDBFRTc5QTQ3MDAyODg2ODIgLyogSklU
SW5saW5lTWV0aG9kcy5oICovLAorCQkJCTg2Q0M4NUEwMEVFNzlBNDcwMDI4ODY4MiAvKiBKSVRJ
bmxpbmVzLmggKi8sCiAJCQkJQkNERDUxRTkwRkI4REY3NDAwNEE4QkRDIC8qIEpJVE9wY29kZXMu
Y3BwICovLAogCQkJCUE3MTIzNkU0MTE5NUYzM0MwMEJEMjE3NCAvKiBKSVRPcGNvZGVzMzJfNjQu
Y3BwICovLAogCQkJCTg2Q0M4NUMzMEVFN0E4OTQwMDI4ODY4MiAvKiBKSVRQcm9wZXJ0eUFjY2Vz
cy5jcHAgKi8sCkBAIC0xODQwLDcgKzE4NDAsNyBAQAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJQzIy
MzlEMTIxNjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNpdG9yLmNwcCAqLywKIAkJCQlDMjIzOUQx
MzE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3IuaCAqLywKLQkJCQlDMjIzOUQxNDE2MjYy
QkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3JJbmxpbmVNZXRob2RzLmggKi8sCisJCQkJQzIyMzlE
MTQxNjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNpdG9ySW5saW5lcy5oICovLAogCQkJCUMyMjM5
RDE1MTYyNjJCREQwMDVBQzVGRCAvKiBHQ1RocmVhZC5jcHAgKi8sCiAJCQkJQzIyMzlEMTYxNjI2
MkJERDAwNUFDNUZEIC8qIEdDVGhyZWFkLmggKi8sCiAJCQkJQzI0RDMxRTAxNjFDRDY5NTAwMkFB
NERCIC8qIEhlYXBTdGF0aXN0aWNzLmNwcCAqLywKQEAgLTE4NDgsNyArMTg0OCw3IEBACiAJCQkJ
QzIyNTQ5NDIxNUY3REJBQTAwNjVFODk4IC8qIFNsb3RWaXNpdG9yLmNwcCAqLywKIAkJCQlDMjEx
MjJERTE1REQ5QUIzMDA3OTBFM0EgLyogR0NUaHJlYWRTaGFyZWREYXRhLmNwcCAqLywKIAkJCQlD
MjExMjJERjE1REQ5QUIzMDA3OTBFM0EgLyogR0NUaHJlYWRTaGFyZWREYXRhLmggKi8sCi0JCQkJ
QzIxMTIyRTAxNUREOUFCMzAwNzkwRTNBIC8qIE1hcmtTdGFja0lubGluZU1ldGhvZHMuaCAqLywK
KwkJCQlDMjExMjJFMDE1REQ5QUIzMDA3OTBFM0EgLyogTWFya1N0YWNrSW5saW5lcy5oICovLAog
CQkJCUMyRTUyNkJCMTU5MEVGMDAwMDU0RTQ4RCAvKiBIZWFwVGltZXIuY3BwICovLAogCQkJCUMy
RTUyNkJDMTU5MEVGMDAwMDU0RTQ4RCAvKiBIZWFwVGltZXIuaCAqLywKIAkJCQlDMjVGOEJDQjE1
NzU0NEE5MDAyNDVCNzEgLyogSW5jcmVtZW50YWxTd2VlcGVyLmNwcCAqLywKQEAgLTE4NjIsNyAr
MTg2Miw3IEBACiAJCQkJQzJDOEQwMkUxNEEzQ0VGQzAwNTc4RTY1IC8qIENvcGllZEJsb2NrLmgg
Ki8sCiAJCQkJQzI0MDMwNTMxNEI0MDRDOTAwNzlFQjY0IC8qIENvcGllZFNwYWNlLmNwcCAqLywK
IAkJCQlDMkVBQTNGODE0OUE4MzA4MDBGQ0UxMTIgLyogQ29waWVkU3BhY2UuaCAqLywKLQkJCQlD
MkM4RDAyQjE0QTNDNkIyMDA1NzhFNjUgLyogQ29waWVkU3BhY2VJbmxpbmVNZXRob2RzLmggKi8s
CisJCQkJQzJDOEQwMkIxNEEzQzZCMjAwNTc4RTY1IC8qIENvcGllZFNwYWNlSW5saW5lcy5oICov
LAogCQkJCTBGMkM1NTZEMTQ3MzhGMkUwMDEyMUU0RiAvKiBERkdDb2RlQmxvY2tzLmNwcCAqLywK
IAkJCQkwRjJDNTU2RTE0NzM4RjJFMDAxMjFFNEYgLyogREZHQ29kZUJsb2Nrcy5oICovLAogCQkJ
CUJDQkUyQ0FEMTRFOTg1QUEwMDA1OTNBRCAvKiBHQ0Fzc2VydGlvbnMuaCAqLywKQEAgLTE4OTQs
NyArMTg5NCw3IEBACiAJCQkJMTQyRDZGMEYxMzUzOUE0MTAwQjAyRTg2IC8qIE1hcmtTdGFjay5o
ICovLAogCQkJCTE0OTcyMDkwMTRFQjgzMTUwMEZFQjFCNyAvKiBQYXNzV2Vhay5oICovLAogCQkJ
CTE0QkE3OEYwMTNBQUI4OEYwMDVCN0MyQyAvKiBTbG90VmlzaXRvci5oICovLAotCQkJCTBGQ0I0
MDg1MTVDMEEzQzMwMDQ4OTMyQiAvKiBTbG90VmlzaXRvcklubGluZU1ldGhvZHMuaCAqLywKKwkJ
CQkwRkNCNDA4NTE1QzBBM0MzMDA0ODkzMkIgLyogU2xvdFZpc2l0b3JJbmxpbmVzLmggKi8sCiAJ
CQkJMTQyRTMxMzIxMzRGRjBBNjAwQUZBREI1IC8qIFN0cm9uZy5oICovLAogCQkJCTE0NTcyMjg1
MTQzN0UxNDAwMDVGREUyNiAvKiBTdHJvbmdJbmxpbmVzLmggKi8sCiAJCQkJMTQxNDQ4Q0MxM0Ex
NzgzNzAwRjVCQTFBIC8qIFRpbnlCbG9vbUZpbHRlci5oICovLApAQCAtMjA5Nyw3ICsyMDk3LDcg
QEAKIAkJCQlCQzc5NTIzNDBFMTVFQjU2MDBBODk4QUIgLyogQm9vbGVhblByb3RvdHlwZS5jcHAg
Ki8sCiAJCQkJQkM3OTUyMzUwRTE1RUI1NjAwQTg5OEFCIC8qIEJvb2xlYW5Qcm90b3R5cGUuaCAq
LywKIAkJCQkwRkI3RjM4QjE1RUQ4RTM4MDBGMTY3QjIgLyogQnV0dGVyZmx5LmggKi8sCi0JCQkJ
MEZCN0YzOEMxNUVEOEUzODAwRjE2N0IyIC8qIEJ1dHRlcmZseUlubGluZU1ldGhvZHMuaCAqLywK
KwkJCQkwRkI3RjM4QzE1RUQ4RTM4MDBGMTY3QjIgLyogQnV0dGVyZmx5SW5saW5lcy5oICovLAog
CQkJCTg2OUQwNEFFMTE5M0I1NEQwMDgwMzQ3NSAvKiBDYWNoZWRUcmFuc2NlbmRlbnRhbEZ1bmN0
aW9uLmggKi8sCiAJCQkJQkNBNjJERkUwRTI4MjYyMzAwMDRGMzBEIC8qIENhbGxEYXRhLmNwcCAq
LywKIAkJCQkxNDVDNTA3RjBEOURGNjNCMDA4OEY2QjkgLyogQ2FsbERhdGEuaCAqLywKQEAgLTIx
NDMsNyArMjE0Myw3IEBACiAJCQkJOTMzQTM0OUQwMzhBRTgwRjAwODYzNUNFIC8qIElkZW50aWZp
ZXIuY3BwICovLAogCQkJCTkzM0EzNDlBMDM4QUU3QzYwMDg2MzVDRSAvKiBJZGVudGlmaWVyLmgg
Ki8sCiAJCQkJMEZCN0YzOEQxNUVEOEUzODAwRjE2N0IyIC8qIEluZGV4aW5nSGVhZGVyLmggKi8s
Ci0JCQkJMEZCN0YzOEUxNUVEOEUzODAwRjE2N0IyIC8qIEluZGV4aW5nSGVhZGVySW5saW5lTWV0
aG9kcy5oICovLAorCQkJCTBGQjdGMzhFMTVFRDhFMzgwMEYxNjdCMiAvKiBJbmRleGluZ0hlYWRl
cklubGluZXMuaCAqLywKIAkJCQkwRjEzRTA0QzE2MTY0QTFCMDBEQzhERTcgLyogSW5kZXhpbmdU
eXBlLmNwcCAqLywKIAkJCQkwRkI3RjM4RjE1RUQ4RTM4MDBGMTY3QjIgLyogSW5kZXhpbmdUeXBl
LmggKi8sCiAJCQkJRTE3ODYzNkMwRDlCRUVDMzAwRDc0RTc1IC8qIEluaXRpYWxpemVUaHJlYWRp
bmcuY3BwICovLApAQCAtMjIwMCw3ICsyMjAwLDcgQEAKIAkJCQk2NTA3RDI5NzBFODcxRTRBMDBE
N0Q4OTYgLyogSlNUeXBlSW5mby5oICovLAogCQkJCUY2OTJBODg3MDI1NTU5N0QwMUZGNjBGNyAv
KiBKU1ZhbHVlLmNwcCAqLywKIAkJCQkxNEFCQjM2RTA5OUMwNzY0MDBFMkEyNEYgLyogSlNWYWx1
ZS5oICovLAotCQkJCTg2NUEzMEYwMTM1MDA3RTEwMENEQjQ5RSAvKiBKU1ZhbHVlSW5saW5lTWV0
aG9kcy5oICovLAorCQkJCTg2NUEzMEYwMTM1MDA3RTEwMENEQjQ5RSAvKiBKU1ZhbHVlSW5saW5l
cy5oICovLAogCQkJCUJDMjJBMzlBMEUxNkUxNDgwMEFGMjFDOCAvKiBKU1ZhcmlhYmxlT2JqZWN0
LmNwcCAqLywKIAkJCQkxNEYyNTI1NjBEMDhERDhEMDA0RUNGRkYgLyogSlNWYXJpYWJsZU9iamVj
dC5oICovLAogCQkJCTE0NDI1NjVGMTVFREU5OEQwMDY2QTQ5QiAvKiBKU1dpdGhTY29wZS5jcHAg
Ki8sCkBAIC0yNjE1LDE0ICsyNjE1LDE0IEBACiAJCQkJQzJCOTE2QzIxNERBMDE0RTAwQ0JBQzg2
IC8qIE1hcmtlZEFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU0QTMzMjAxNUJEMkUw
NzAwNkY1NEYzIC8qIFZNSW5zcGVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjIzOUQxODE2
MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3IuaCBpbiBIZWFkZXJzICovLAotCQkJCUMyMjM5
RDE5MTYyNjJCREQwMDVBQzVGRCAvKiBDb3B5VmlzaXRvcklubGluZU1ldGhvZHMuaCBpbiBIZWFk
ZXJzICovLAorCQkJCUMyMjM5RDE5MTYyNjJCREQwMDVBQzVGRCAvKiBDb3B5VmlzaXRvcklubGlu
ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyNEQzMUUzMTYxQ0Q2OTUwMDJBQTREQiAvKiBIZWFw
U3RhdGlzdGljcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzJBN0Y2ODgxNjA0MzJENDAwRjc2Qjk4
IC8qIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTIwQ0U5RTE1
RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9vcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzIxMTIy
RTIxNUREOUFCMzAwNzkwRTNBIC8qIEdDVGhyZWFkU2hhcmVkRGF0YS5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJQzIxNjBGRTcxNUY3RTk1RTAwOTQyREZDIC8qIFNsb3RWaXNpdG9ySW5saW5lTWV0aG9k
cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJQzIxNjBGRTcxNUY3RTk1RTAwOTQyREZDIC8qIFNsb3RW
aXNpdG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzJFNTI2QkUxNTkwRUYwMDAwNTRF
NDhEIC8qIEhlYXBUaW1lci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQzIxMTIyRTMxNUREOUFCMzAw
NzkwRTNBIC8qIE1hcmtTdGFja0lubGluZU1ldGhvZHMuaCBpbiBIZWFkZXJzICovLAorCQkJCUMy
MTEyMkUzMTVERDlBQjMwMDc5MEUzQSAvKiBNYXJrU3RhY2tJbmxpbmVzLmggaW4gSGVhZGVycyAq
LywKIAkJCQlDMjVGOEJDRTE1NzU0NEE5MDAyNDVCNzEgLyogSW5jcmVtZW50YWxTd2VlcGVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNFNjBFMTZGNUNEMDBCMzQ0NjAgLyogQXJyYXlDb25z
dHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRTcwRTE2RjVDRDAwQjM0NDYwIC8q
IEFycmF5UHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKQEAgLTI2MzUsNyArMjYzNSw3IEBACiAJ
CQkJQkMxOEMzRUMwRTE2RjVDRDAwQjM0NDYwIC8qIEJvb2xlYW5PYmplY3QuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUMyQzhEMDMwMTRBM0NFRkMwMDU3OEU2NSAvKiBDb3BpZWRCbG9jay5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQzJFQUEzRkExNDlBODM1RTAwRkNFMTEyIC8qIENvcGllZFNwYWNlLmgg
aW4gSGVhZGVycyAqLywKLQkJCQlDMkM4RDAyRDE0QTNDNkUwMDA1NzhFNjUgLyogQ29waWVkU3Bh
Y2VJbmxpbmVNZXRob2RzLmggaW4gSGVhZGVycyAqLywKKwkJCQlDMkM4RDAyRDE0QTNDNkUwMDA1
NzhFNjUgLyogQ29waWVkU3BhY2VJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NjlBMDcy
MzBFRDFDRTMzMDBGMUY2ODEgLyogQnl0ZWNvZGVHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAog
CQkJCTg2OUQwNEFGMTE5M0I1NEQwMDgwMzQ3NSAvKiBDYWNoZWRUcmFuc2NlbmRlbnRhbEZ1bmN0
aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNFRDBFMTZGNUNEMDBCMzQ0NjAgLyogQ2Fs
bERhdGEuaCBpbiBIZWFkZXJzICovLApAQCAtMjcxNyw3ICsyNzE3LDcgQEAKIAkJCQlCQzE4QzQx
NTBFMTZGNUNEMDBCMzQ0NjAgLyogSmF2YVNjcmlwdENvcmVQcmVmaXguaCBpbiBIZWFkZXJzICov
LAogCQkJCTE0MjlEOTMwMEVEMjJENzAwMEI4OTYxOSAvKiBKSVQuaCBpbiBIZWFkZXJzICovLAog
CQkJCTg2Q0NFRkRFMEY0MTNGODkwMEZEN0Y5RSAvKiBKSVRDb2RlLmggaW4gSGVhZGVycyAqLywK
LQkJCQk4NkNDODVBMTBFRTc5QTQ3MDAyODg2ODIgLyogSklUSW5saW5lTWV0aG9kcy5oIGluIEhl
YWRlcnMgKi8sCisJCQkJODZDQzg1QTEwRUU3OUE0NzAwMjg4NjgyIC8qIEpJVElubGluZXMuaCBp
biBIZWFkZXJzICovLAogCQkJCTk2MDYyNjk2MEZCOEVDMDIwMDk3OThBQiAvKiBKSVRTdHViQ2Fs
bC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRDNTI0MkIwRjUzNTVFOTAwQkEzRDA0IC8qIEpJVFN0
dWJzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzZGNTRBMzEzQjI4QUFCMDBFRjJCQ0UgLyogSklU
V3JpdGVCYXJyaWVyLmggaW4gSGVhZGVycyAqLywKQEAgLTI3NTksNyArMjc1OSw3IEBACiAJCQkJ
QkMxOEM0MkEwRTE2RjVDRDAwQjM0NDYwIC8qIEpTVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NjUwN0QyOUUwRTg3MUU1RTAwRDdEODk2IC8qIEpTVHlwZUluZm8uaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDMThDNDJCMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU1ZhbHVlLmggaW4gSGVhZGVycyAqLywK
LQkJCQk4NjVBMzBGMTEzNTAwN0UxMDBDREI0OUUgLyogSlNWYWx1ZUlubGluZU1ldGhvZHMuaCBp
biBIZWFkZXJzICovLAorCQkJCTg2NUEzMEYxMTM1MDA3RTEwMENEQjQ5RSAvKiBKU1ZhbHVlSW5s
aW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MkMwRTE2RjVDRDAwQjM0NDYwIC8qIEpT
VmFsdWVSZWYuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDJEMEUxNkY1Q0QwMEIzNDQ2MCAv
KiBKU1ZhcmlhYmxlT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzQ4MkU5MzExNkE3Q0FE
MDAzQjA3MTIgLyogSlNXZWFrT2JqZWN0TWFwUmVmSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLApA
QCAtMjk5NSw5ICsyOTk1LDkgQEAKIAkJCQkwRkI3RjM5NTE1RUQ4RTQ2MDBGMTY3QjIgLyogQXJy
YXlDb252ZW50aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCN0YzOTYxNUVEOEU0NjAwRjE2
N0IyIC8qIEFycmF5U3RvcmFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCN0YzOTcxNUVEOEU0
NjAwRjE2N0IyIC8qIEJ1dHRlcmZseS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEZCN0YzOTgxNUVE
OEU0NjAwRjE2N0IyIC8qIEJ1dHRlcmZseUlubGluZU1ldGhvZHMuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGQjdGMzk4MTVFRDhFNDYwMEYxNjdCMiAvKiBCdXR0ZXJmbHlJbmxpbmVzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkI3RjM5OTE1RUQ4RTQ2MDBGMTY3QjIgLyogSW5kZXhpbmdIZWFkZXIu
aCBpbiBIZWFkZXJzICovLAotCQkJCTBGQjdGMzlBMTVFRDhFNDYwMEYxNjdCMiAvKiBJbmRleGlu
Z0hlYWRlcklubGluZU1ldGhvZHMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGQjdGMzlBMTVFRDhF
NDYwMEYxNjdCMiAvKiBJbmRleGluZ0hlYWRlcklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGQjdGMzlCMTVFRDhFNDYwMEYxNjdCMiAvKiBJbmRleGluZ1R5cGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGQjdGMzlDMTVFRDhFNDYwMEYxNjdCMiAvKiBQcm9wZXJ0eVN0b3JhZ2UuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGQjdGMzlEMTVFRDhFNDYwMEYxNjdCMiAvKiBSZWplY3QuaCBpbiBI
ZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5jcHAJKHJldmlzaW9uIDEzMzM5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBACiAjaW5j
bHVkZSAiTG93TGV2ZWxJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgIk1ldGhvZENhbGxMaW5rU3Rh
dHVzLmgiCiAjaW5jbHVkZSAiUmVwYXRjaEJ1ZmZlci5oIgotI2luY2x1ZGUgIlNsb3RWaXNpdG9y
SW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5lcy5oIgogI2luY2x1
ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgogI2luY2x1ZGUgPHd0
Zi9VbnVzZWRQYXJhbS5oPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVy
YXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09w
ZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxMzMzOTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw5ICsyNyw5IEBACiAj
aW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgogCiAjaW5jbHVkZSAiQXJndW1lbnRzLmgiCi0jaW5j
bHVkZSAiQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkJ1dHRlcmZseUlubGlu
ZXMuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKLSNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGlu
ZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZXMuaCIKICNpbmNsdWRlICJE
RkdPU1JFeGl0LmgiCiAjaW5jbHVkZSAiREZHUmVwYXRjaC5oIgogI2luY2x1ZGUgIkRGR1RodW5r
cy5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2
ZVJvb3RzLmNwcAkocmV2aXNpb24gMTMzMzkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw5ICsyNiw5IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ29uc2VydmF0aXZlUm9vdHMuaCIKIAot
I2luY2x1ZGUgIkNvcGllZFNwYWNlLmgiCi0jaW5jbHVkZSAiQ29waWVkU3BhY2VJbmxpbmVNZXRo
b2RzLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiQ29waWVkU3BhY2UuaCIK
KyNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZXMuaCIKICNpbmNsdWRlICJERkdDb2RlQmxvY2tz
LmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkQmxvY2suaAkocmV2aXNpb24gMTMzMzkyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkQmxvY2suaAkod29ya2luZyBjb3B5
KQpAQCAtMjksNyArMjksNyBAQAogI2luY2x1ZGUgIkJsb2NrQWxsb2NhdG9yLmgiCiAjaW5jbHVk
ZSAiSGVhcEJsb2NrLmgiCiAjaW5jbHVkZSAiSlNWYWx1ZS5oIgotI2luY2x1ZGUgIkpTVmFsdWVJ
bmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiSlNWYWx1ZUlubGluZXMuaCIKICNpbmNsdWRlICJP
cHRpb25zLmgiCiAjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlLmNwcAkocmV2aXNpb24gMTMzMzkyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ29waWVkU3Bh
Y2UuaCIKIAotI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUg
IkNvcGllZFNwYWNlSW5saW5lcy5oIgogI2luY2x1ZGUgIkdDQWN0aXZpdHlDYWxsYmFjay5oIgog
I2luY2x1ZGUgIk9wdGlvbnMuaCIKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
Q29waWVkU3BhY2VJbmxpbmVNZXRob2RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvQ29waWVkU3BhY2VJbmxpbmVNZXRob2RzLmgJKHJldmlzaW9uIDEzMzM5MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDE4NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgQ29waWVkU3BhY2VJbmxpbmVNZXRob2Rz
X2gKLSNkZWZpbmUgQ29waWVkU3BhY2VJbmxpbmVNZXRob2RzX2gKLQotI2luY2x1ZGUgIkNvcGll
ZEJsb2NrLmgiCi0jaW5jbHVkZSAiQ29waWVkU3BhY2UuaCIKLSNpbmNsdWRlICJIZWFwLmgiCi0j
aW5jbHVkZSAiSGVhcEJsb2NrLmgiCi0jaW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgiCi0jaW5jbHVk
ZSA8d3RmL0NoZWNrZWRCb29sZWFuLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1pbmxpbmUgYm9v
bCBDb3BpZWRTcGFjZTo6Y29udGFpbnMoQ29waWVkQmxvY2sqIGJsb2NrKQotewotICAgIHJldHVy
biAhbV9ibG9ja0ZpbHRlci5ydWxlT3V0KHJlaW50ZXJwcmV0X2Nhc3Q8Qml0cz4oYmxvY2spKSAm
JiBtX2Jsb2NrU2V0LmNvbnRhaW5zKGJsb2NrKTsKLX0KLQotaW5saW5lIGJvb2wgQ29waWVkU3Bh
Y2U6OmNvbnRhaW5zKHZvaWQqIHB0ciwgQ29waWVkQmxvY2sqJiByZXN1bHQpCi17Ci0gICAgQ29w
aWVkQmxvY2sqIGJsb2NrID0gYmxvY2tGb3IocHRyKTsKLSAgICBpZiAoY29udGFpbnMoYmxvY2sp
KSB7Ci0gICAgICAgIHJlc3VsdCA9IGJsb2NrOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci0gICAgYmxvY2sgPSBvdmVyc2l6ZUJsb2NrRm9yKHB0cik7Ci0gICAgcmVzdWx0ID0gYmxvY2s7
Ci0gICAgcmV0dXJuIGNvbnRhaW5zKGJsb2NrKTsKLX0KLQotaW5saW5lIHZvaWQgQ29waWVkU3Bh
Y2U6OnBpbihDb3BpZWRCbG9jayogYmxvY2spCi17Ci0gICAgYmxvY2stPm1faXNQaW5uZWQgPSB0
cnVlOwotfQotCi1pbmxpbmUgdm9pZCBDb3BpZWRTcGFjZTo6cGluSWZOZWNlc3Nhcnkodm9pZCog
b3BhcXVlUG9pbnRlcikKLXsKLSAgICAvLyBQb2ludGVycyBpbnRvIHRoZSBjb3BpZWQgc3BhY2Ug
Y29tZSBpbiB0aGUgZm9sbG93aW5nIHZhcmlldGllczoKLSAgICAvLyAxKSAgUG9pbnRlcnMgdG8g
dGhlIHN0YXJ0IG9mIGEgc3BhbiBvZiBtZW1vcnkuIFRoaXMgaXMgdGhlIG1vc3QKLSAgICAvLyAg
ICAgbmF0dXJhbCB0aG91Z2ggbm90IG5lY2Vzc2FyaWx5IHRoZSBtb3N0IGNvbW1vbi4KLSAgICAv
LyAyKSAgUG9pbnRlcnMgdG8gb25lIHZhbHVlLXNpemVkICg4IGJ5dGUpIHdvcmQgcGFzdCB0aGUg
ZW5kIG9mCi0gICAgLy8gICAgIGEgc3BhbiBvZiBtZW1vcnkuIFRoaXMgY3VycmVudGx5IG9jY3Vy
cyB3aXRoIHNlbWktYnV0dGVyZmxpZXMKLSAgICAvLyAgICAgYW5kIHNob3VsZCBiZSBmaXhlZCBz
b29uLCBvbmNlIHRoZSBvdGhlciBoYWxmIG9mIHRoZQotICAgIC8vICAgICBidXR0ZXJmbHkgbGFu
ZHMuCi0gICAgLy8gMykgIFBvaW50ZXJzIHRvIHRoZSBpbm5hcmRzIGFyaXNpbmcgZnJvbSBsb29w
IGluZHVjdGlvbiB2YXJpYWJsZQotICAgIC8vICAgICBvcHRpbWl6YXRpb25zIChlaXRoZXIgbWFu
dWFsIG9uZXMgb3IgYXV0b21hdGljLCBieSB0aGUKLSAgICAvLyAgICAgY29tcGlsZXIpLgotICAg
IC8vIDQpICBQb2ludGVycyB0byB0aGUgZW5kIG9mIGEgc3BhbiBvZiBtZW1vcnkgaW4gYXJpc2lu
ZyBmcm9tCi0gICAgLy8gICAgIGluZHVjdGlvbiB2YXJpYWJsZSBvcHRpbWl6YXRpb25zIGNvbWJp
bmVkIHdpdGggdGhlCi0gICAgLy8gICAgIEdDLXRvLWNvbXBpbGVyIGNvbnRyYWN0IGxhaWQgb3V0
IGluIHRoZSBDIHNwZWM6IGEgcG9pbnRlciB0bwotICAgIC8vICAgICB0aGUgZW5kIG9mIGEgc3Bh
biBvZiBtZW1vcnkgbXVzdCBiZSBjb25zaWRlcmVkIHRvIGJlIGEKLSAgICAvLyAgICAgcG9pbnRl
ciB0byB0aGF0IG1lbW9yeS4KLSAgICAKLSAgICBFbmNvZGVkSlNWYWx1ZSogcG9pbnRlciA9IHJl
aW50ZXJwcmV0X2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPihvcGFxdWVQb2ludGVyKTsKLSAgICBDb3Bp
ZWRCbG9jayogYmxvY2s7Ci0KLSAgICAvLyBIYW5kbGUgKDEpIGFuZCAoMykuCi0gICAgaWYgKGNv
bnRhaW5zKHBvaW50ZXIsIGJsb2NrKSkKLSAgICAgICAgcGluKGJsb2NrKTsKLSAgICAKLSAgICAv
LyBIYW5kbGUgKDQpLiBXZSBkb24ndCBoYXZlIHRvIGV4cGxpY2l0bHkgY2hlY2sgYW5kIHBpbiB0
aGUgYmxvY2sgdW5kZXIgdGhpcwotICAgIC8vIHBvaW50ZXIgYmVjYXVzZSBpdCBjYW5ub3QgcG9z
c2libHkgcG9pbnQgdG8gc29tZXRoaW5nIHRoYXQgY2FzZXMgKDEpIGFuZAotICAgIC8vICgzKSBh
Ym92ZSBvciBjYXNlICgyKSBiZWxvdyB3b3VsZG4ndCBhbHJlYWR5IGNhdGNoLgotICAgIHBvaW50
ZXItLTsKLSAgICAKLSAgICAvLyBIYW5kbGUgKDIpCi0gICAgcG9pbnRlci0tOwotICAgIGlmIChj
b250YWlucyhwb2ludGVyLCBibG9jaykpCi0gICAgICAgIHBpbihibG9jayk7Ci19Ci0KLWlubGlu
ZSB2b2lkIENvcGllZFNwYWNlOjpyZWN5Y2xlRXZhY3VhdGVkQmxvY2soQ29waWVkQmxvY2sqIGJs
b2NrKQotewotICAgIEFTU0VSVChibG9jayk7Ci0gICAgQVNTRVJUKGJsb2NrLT5jYW5CZVJlY3lj
bGVkKCkpOwotICAgIEFTU0VSVCghYmxvY2stPm1faXNQaW5uZWQpOwotICAgIHsKLSAgICAgICAg
U3BpbkxvY2tIb2xkZXIgbG9ja2VyKCZtX3RvU3BhY2VMb2NrKTsKLSAgICAgICAgbV9ibG9ja1Nl
dC5yZW1vdmUoYmxvY2spOwotICAgICAgICBtX2Zyb21TcGFjZS0+cmVtb3ZlKGJsb2NrKTsKLSAg
ICB9Ci0gICAgbV9oZWFwLT5ibG9ja0FsbG9jYXRvcigpLmRlYWxsb2NhdGUoQ29waWVkQmxvY2s6
OmRlc3Ryb3koYmxvY2spKTsKLX0KLQotaW5saW5lIHZvaWQgQ29waWVkU3BhY2U6OnJlY3ljbGVC
b3Jyb3dlZEJsb2NrKENvcGllZEJsb2NrKiBibG9jaykKLXsKLSAgICBtX2hlYXAtPmJsb2NrQWxs
b2NhdG9yKCkuZGVhbGxvY2F0ZShDb3BpZWRCbG9jazo6ZGVzdHJveShibG9jaykpOwotCi0gICAg
ewotICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9sb2FuZWRCbG9ja3NMb2NrKTsKLSAgICAg
ICAgQVNTRVJUKG1fbnVtYmVyT2ZMb2FuZWRCbG9ja3MgPiAwKTsKLSAgICAgICAgQVNTRVJUKG1f
aW5Db3B5aW5nUGhhc2UpOwotICAgICAgICBtX251bWJlck9mTG9hbmVkQmxvY2tzLS07Ci0gICAg
ICAgIGlmICghbV9udW1iZXJPZkxvYW5lZEJsb2NrcykKLSAgICAgICAgICAgIG1fbG9hbmVkQmxv
Y2tzQ29uZGl0aW9uLnNpZ25hbCgpOwotICAgIH0KLX0KLQotaW5saW5lIENvcGllZEJsb2NrKiBD
b3BpZWRTcGFjZTo6YWxsb2NhdGVCbG9ja0ZvckNvcHlpbmdQaGFzZSgpCi17Ci0gICAgQVNTRVJU
KG1faW5Db3B5aW5nUGhhc2UpOwotICAgIENvcGllZEJsb2NrKiBibG9jayA9IENvcGllZEJsb2Nr
OjpjcmVhdGVOb1plcm9GaWxsKG1faGVhcC0+YmxvY2tBbGxvY2F0b3IoKS5hbGxvY2F0ZTxDb3Bp
ZWRCbG9jaz4oKSk7Ci0KLSAgICB7Ci0gICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2xvYW5l
ZEJsb2Nrc0xvY2spOwotICAgICAgICBtX251bWJlck9mTG9hbmVkQmxvY2tzKys7Ci0gICAgfQot
Ci0gICAgQVNTRVJUKCFibG9jay0+ZGF0YVNpemUoKSk7Ci0gICAgcmV0dXJuIGJsb2NrOwotfQot
Ci1pbmxpbmUgdm9pZCBDb3BpZWRTcGFjZTo6YWxsb2NhdGVCbG9jaygpCi17Ci0gICAgaWYgKG1f
aGVhcC0+c2hvdWxkQ29sbGVjdCgpKQotICAgICAgICBtX2hlYXAtPmNvbGxlY3QoSGVhcDo6RG9O
b3RTd2VlcCk7Ci0KLSAgICBtX2FsbG9jYXRvci5yZXNldEN1cnJlbnRCbG9jaygpOwotICAgIAot
ICAgIENvcGllZEJsb2NrKiBibG9jayA9IENvcGllZEJsb2NrOjpjcmVhdGUobV9oZWFwLT5ibG9j
a0FsbG9jYXRvcigpLmFsbG9jYXRlPENvcGllZEJsb2NrPigpKTsKLSAgICAgICAgCi0gICAgbV90
b1NwYWNlLT5wdXNoKGJsb2NrKTsKLSAgICBtX2Jsb2NrRmlsdGVyLmFkZChyZWludGVycHJldF9j
YXN0PEJpdHM+KGJsb2NrKSk7Ci0gICAgbV9ibG9ja1NldC5hZGQoYmxvY2spOwotICAgIG1fYWxs
b2NhdG9yLnNldEN1cnJlbnRCbG9jayhibG9jayk7Ci19Ci0KLWlubGluZSBDaGVja2VkQm9vbGVh
biBDb3BpZWRTcGFjZTo6dHJ5QWxsb2NhdGUoc2l6ZV90IGJ5dGVzLCB2b2lkKiogb3V0UHRyKQot
ewotICAgIEFTU0VSVCghbV9oZWFwLT5nbG9iYWxEYXRhKCktPmlzSW5pdGlhbGl6aW5nT2JqZWN0
KCkpOwotCi0gICAgaWYgKGlzT3ZlcnNpemUoYnl0ZXMpIHx8ICFtX2FsbG9jYXRvci50cnlBbGxv
Y2F0ZShieXRlcywgb3V0UHRyKSkKLSAgICAgICAgcmV0dXJuIHRyeUFsbG9jYXRlU2xvd0Nhc2Uo
Ynl0ZXMsIG91dFB0cik7Ci0gICAgCi0gICAgQVNTRVJUKCpvdXRQdHIpOwotICAgIHJldHVybiB0
cnVlOwotfQotCi1pbmxpbmUgYm9vbCBDb3BpZWRTcGFjZTo6aXNPdmVyc2l6ZShzaXplX3QgYnl0
ZXMpCi17Ci0gICAgcmV0dXJuIGJ5dGVzID4gc19tYXhBbGxvY2F0aW9uU2l6ZTsKLX0KLQotaW5s
aW5lIGJvb2wgQ29waWVkU3BhY2U6OmlzUGlubmVkKHZvaWQqIHB0cikKLXsKLSAgICByZXR1cm4g
YmxvY2tGb3IocHRyKS0+bV9pc1Bpbm5lZDsKLX0KLQotaW5saW5lIENvcGllZEJsb2NrKiBDb3Bp
ZWRTcGFjZTo6b3ZlcnNpemVCbG9ja0Zvcih2b2lkKiBwdHIpCi17Ci0gICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8Q29waWVkQmxvY2sqPihyZWludGVycHJldF9jYXN0PHNpemVfdD4ocHRyKSAm
IFdURjo6cGFnZU1hc2soKSk7Ci19Ci0KLWlubGluZSBDb3BpZWRCbG9jayogQ29waWVkU3BhY2U6
OmJsb2NrRm9yKHZvaWQqIHB0cikKLXsKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxDb3Bp
ZWRCbG9jayo+KHJlaW50ZXJwcmV0X2Nhc3Q8c2l6ZV90PihwdHIpICYgc19ibG9ja01hc2spOwot
fQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9Db3BpZWRTcGFjZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZUlubGluZXMuaAkocmV2aXNpb24gMTMzMzg5KQko
ZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZUlubGluZU1ldGhvZHMu
aDoxMzMzODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZUlubGlu
ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE4NSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIENvcGllZFNwYWNlSW5saW5lTWV0
aG9kc19oCisjZGVmaW5lIENvcGllZFNwYWNlSW5saW5lTWV0aG9kc19oCisKKyNpbmNsdWRlICJD
b3BpZWRCbG9jay5oIgorI2luY2x1ZGUgIkNvcGllZFNwYWNlLmgiCisjaW5jbHVkZSAiSGVhcC5o
IgorI2luY2x1ZGUgIkhlYXBCbG9jay5oIgorI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgorI2lu
Y2x1ZGUgPHd0Zi9DaGVja2VkQm9vbGVhbi5oPgorCituYW1lc3BhY2UgSlNDIHsKKworaW5saW5l
IGJvb2wgQ29waWVkU3BhY2U6OmNvbnRhaW5zKENvcGllZEJsb2NrKiBibG9jaykKK3sKKyAgICBy
ZXR1cm4gIW1fYmxvY2tGaWx0ZXIucnVsZU91dChyZWludGVycHJldF9jYXN0PEJpdHM+KGJsb2Nr
KSkgJiYgbV9ibG9ja1NldC5jb250YWlucyhibG9jayk7Cit9CisKK2lubGluZSBib29sIENvcGll
ZFNwYWNlOjpjb250YWlucyh2b2lkKiBwdHIsIENvcGllZEJsb2NrKiYgcmVzdWx0KQoreworICAg
IENvcGllZEJsb2NrKiBibG9jayA9IGJsb2NrRm9yKHB0cik7CisgICAgaWYgKGNvbnRhaW5zKGJs
b2NrKSkgeworICAgICAgICByZXN1bHQgPSBibG9jazsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorICAgIGJsb2NrID0gb3ZlcnNpemVCbG9ja0ZvcihwdHIpOworICAgIHJlc3VsdCA9IGJs
b2NrOworICAgIHJldHVybiBjb250YWlucyhibG9jayk7Cit9CisKK2lubGluZSB2b2lkIENvcGll
ZFNwYWNlOjpwaW4oQ29waWVkQmxvY2sqIGJsb2NrKQoreworICAgIGJsb2NrLT5tX2lzUGlubmVk
ID0gdHJ1ZTsKK30KKworaW5saW5lIHZvaWQgQ29waWVkU3BhY2U6OnBpbklmTmVjZXNzYXJ5KHZv
aWQqIG9wYXF1ZVBvaW50ZXIpCit7CisgICAgLy8gUG9pbnRlcnMgaW50byB0aGUgY29waWVkIHNw
YWNlIGNvbWUgaW4gdGhlIGZvbGxvd2luZyB2YXJpZXRpZXM6CisgICAgLy8gMSkgIFBvaW50ZXJz
IHRvIHRoZSBzdGFydCBvZiBhIHNwYW4gb2YgbWVtb3J5LiBUaGlzIGlzIHRoZSBtb3N0CisgICAg
Ly8gICAgIG5hdHVyYWwgdGhvdWdoIG5vdCBuZWNlc3NhcmlseSB0aGUgbW9zdCBjb21tb24uCisg
ICAgLy8gMikgIFBvaW50ZXJzIHRvIG9uZSB2YWx1ZS1zaXplZCAoOCBieXRlKSB3b3JkIHBhc3Qg
dGhlIGVuZCBvZgorICAgIC8vICAgICBhIHNwYW4gb2YgbWVtb3J5LiBUaGlzIGN1cnJlbnRseSBv
Y2N1cnMgd2l0aCBzZW1pLWJ1dHRlcmZsaWVzCisgICAgLy8gICAgIGFuZCBzaG91bGQgYmUgZml4
ZWQgc29vbiwgb25jZSB0aGUgb3RoZXIgaGFsZiBvZiB0aGUKKyAgICAvLyAgICAgYnV0dGVyZmx5
IGxhbmRzLgorICAgIC8vIDMpICBQb2ludGVycyB0byB0aGUgaW5uYXJkcyBhcmlzaW5nIGZyb20g
bG9vcCBpbmR1Y3Rpb24gdmFyaWFibGUKKyAgICAvLyAgICAgb3B0aW1pemF0aW9ucyAoZWl0aGVy
IG1hbnVhbCBvbmVzIG9yIGF1dG9tYXRpYywgYnkgdGhlCisgICAgLy8gICAgIGNvbXBpbGVyKS4K
KyAgICAvLyA0KSAgUG9pbnRlcnMgdG8gdGhlIGVuZCBvZiBhIHNwYW4gb2YgbWVtb3J5IGluIGFy
aXNpbmcgZnJvbQorICAgIC8vICAgICBpbmR1Y3Rpb24gdmFyaWFibGUgb3B0aW1pemF0aW9ucyBj
b21iaW5lZCB3aXRoIHRoZQorICAgIC8vICAgICBHQy10by1jb21waWxlciBjb250cmFjdCBsYWlk
IG91dCBpbiB0aGUgQyBzcGVjOiBhIHBvaW50ZXIgdG8KKyAgICAvLyAgICAgdGhlIGVuZCBvZiBh
IHNwYW4gb2YgbWVtb3J5IG11c3QgYmUgY29uc2lkZXJlZCB0byBiZSBhCisgICAgLy8gICAgIHBv
aW50ZXIgdG8gdGhhdCBtZW1vcnkuCisgICAgCisgICAgRW5jb2RlZEpTVmFsdWUqIHBvaW50ZXIg
PSByZWludGVycHJldF9jYXN0PEVuY29kZWRKU1ZhbHVlKj4ob3BhcXVlUG9pbnRlcik7CisgICAg
Q29waWVkQmxvY2sqIGJsb2NrOworCisgICAgLy8gSGFuZGxlICgxKSBhbmQgKDMpLgorICAgIGlm
IChjb250YWlucyhwb2ludGVyLCBibG9jaykpCisgICAgICAgIHBpbihibG9jayk7CisgICAgCisg
ICAgLy8gSGFuZGxlICg0KS4gV2UgZG9uJ3QgaGF2ZSB0byBleHBsaWNpdGx5IGNoZWNrIGFuZCBw
aW4gdGhlIGJsb2NrIHVuZGVyIHRoaXMKKyAgICAvLyBwb2ludGVyIGJlY2F1c2UgaXQgY2Fubm90
IHBvc3NpYmx5IHBvaW50IHRvIHNvbWV0aGluZyB0aGF0IGNhc2VzICgxKSBhbmQKKyAgICAvLyAo
MykgYWJvdmUgb3IgY2FzZSAoMikgYmVsb3cgd291bGRuJ3QgYWxyZWFkeSBjYXRjaC4KKyAgICBw
b2ludGVyLS07CisgICAgCisgICAgLy8gSGFuZGxlICgyKQorICAgIHBvaW50ZXItLTsKKyAgICBp
ZiAoY29udGFpbnMocG9pbnRlciwgYmxvY2spKQorICAgICAgICBwaW4oYmxvY2spOworfQorCitp
bmxpbmUgdm9pZCBDb3BpZWRTcGFjZTo6cmVjeWNsZUV2YWN1YXRlZEJsb2NrKENvcGllZEJsb2Nr
KiBibG9jaykKK3sKKyAgICBBU1NFUlQoYmxvY2spOworICAgIEFTU0VSVChibG9jay0+Y2FuQmVS
ZWN5Y2xlZCgpKTsKKyAgICBBU1NFUlQoIWJsb2NrLT5tX2lzUGlubmVkKTsKKyAgICB7CisgICAg
ICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tlcigmbV90b1NwYWNlTG9jayk7CisgICAgICAgIG1fYmxv
Y2tTZXQucmVtb3ZlKGJsb2NrKTsKKyAgICAgICAgbV9mcm9tU3BhY2UtPnJlbW92ZShibG9jayk7
CisgICAgfQorICAgIG1faGVhcC0+YmxvY2tBbGxvY2F0b3IoKS5kZWFsbG9jYXRlKENvcGllZEJs
b2NrOjpkZXN0cm95KGJsb2NrKSk7Cit9CisKK2lubGluZSB2b2lkIENvcGllZFNwYWNlOjpyZWN5
Y2xlQm9ycm93ZWRCbG9jayhDb3BpZWRCbG9jayogYmxvY2spCit7CisgICAgbV9oZWFwLT5ibG9j
a0FsbG9jYXRvcigpLmRlYWxsb2NhdGUoQ29waWVkQmxvY2s6OmRlc3Ryb3koYmxvY2spKTsKKwor
ICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbG9hbmVkQmxvY2tzTG9jayk7Cisg
ICAgICAgIEFTU0VSVChtX251bWJlck9mTG9hbmVkQmxvY2tzID4gMCk7CisgICAgICAgIEFTU0VS
VChtX2luQ29weWluZ1BoYXNlKTsKKyAgICAgICAgbV9udW1iZXJPZkxvYW5lZEJsb2Nrcy0tOwor
ICAgICAgICBpZiAoIW1fbnVtYmVyT2ZMb2FuZWRCbG9ja3MpCisgICAgICAgICAgICBtX2xvYW5l
ZEJsb2Nrc0NvbmRpdGlvbi5zaWduYWwoKTsKKyAgICB9Cit9CisKK2lubGluZSBDb3BpZWRCbG9j
ayogQ29waWVkU3BhY2U6OmFsbG9jYXRlQmxvY2tGb3JDb3B5aW5nUGhhc2UoKQoreworICAgIEFT
U0VSVChtX2luQ29weWluZ1BoYXNlKTsKKyAgICBDb3BpZWRCbG9jayogYmxvY2sgPSBDb3BpZWRC
bG9jazo6Y3JlYXRlTm9aZXJvRmlsbChtX2hlYXAtPmJsb2NrQWxsb2NhdG9yKCkuYWxsb2NhdGU8
Q29waWVkQmxvY2s+KCkpOworCisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9s
b2FuZWRCbG9ja3NMb2NrKTsKKyAgICAgICAgbV9udW1iZXJPZkxvYW5lZEJsb2NrcysrOworICAg
IH0KKworICAgIEFTU0VSVCghYmxvY2stPmRhdGFTaXplKCkpOworICAgIHJldHVybiBibG9jazsK
K30KKworaW5saW5lIHZvaWQgQ29waWVkU3BhY2U6OmFsbG9jYXRlQmxvY2soKQoreworICAgIGlm
IChtX2hlYXAtPnNob3VsZENvbGxlY3QoKSkKKyAgICAgICAgbV9oZWFwLT5jb2xsZWN0KEhlYXA6
OkRvTm90U3dlZXApOworCisgICAgbV9hbGxvY2F0b3IucmVzZXRDdXJyZW50QmxvY2soKTsKKyAg
ICAKKyAgICBDb3BpZWRCbG9jayogYmxvY2sgPSBDb3BpZWRCbG9jazo6Y3JlYXRlKG1faGVhcC0+
YmxvY2tBbGxvY2F0b3IoKS5hbGxvY2F0ZTxDb3BpZWRCbG9jaz4oKSk7CisgICAgICAgIAorICAg
IG1fdG9TcGFjZS0+cHVzaChibG9jayk7CisgICAgbV9ibG9ja0ZpbHRlci5hZGQocmVpbnRlcnBy
ZXRfY2FzdDxCaXRzPihibG9jaykpOworICAgIG1fYmxvY2tTZXQuYWRkKGJsb2NrKTsKKyAgICBt
X2FsbG9jYXRvci5zZXRDdXJyZW50QmxvY2soYmxvY2spOworfQorCitpbmxpbmUgQ2hlY2tlZEJv
b2xlYW4gQ29waWVkU3BhY2U6OnRyeUFsbG9jYXRlKHNpemVfdCBieXRlcywgdm9pZCoqIG91dFB0
cikKK3sKKyAgICBBU1NFUlQoIW1faGVhcC0+Z2xvYmFsRGF0YSgpLT5pc0luaXRpYWxpemluZ09i
amVjdCgpKTsKKworICAgIGlmIChpc092ZXJzaXplKGJ5dGVzKSB8fCAhbV9hbGxvY2F0b3IudHJ5
QWxsb2NhdGUoYnl0ZXMsIG91dFB0cikpCisgICAgICAgIHJldHVybiB0cnlBbGxvY2F0ZVNsb3dD
YXNlKGJ5dGVzLCBvdXRQdHIpOworICAgIAorICAgIEFTU0VSVCgqb3V0UHRyKTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworaW5saW5lIGJvb2wgQ29waWVkU3BhY2U6OmlzT3ZlcnNpemUoc2l6ZV90
IGJ5dGVzKQoreworICAgIHJldHVybiBieXRlcyA+IHNfbWF4QWxsb2NhdGlvblNpemU7Cit9CisK
K2lubGluZSBib29sIENvcGllZFNwYWNlOjppc1Bpbm5lZCh2b2lkKiBwdHIpCit7CisgICAgcmV0
dXJuIGJsb2NrRm9yKHB0ciktPm1faXNQaW5uZWQ7Cit9CisKK2lubGluZSBDb3BpZWRCbG9jayog
Q29waWVkU3BhY2U6Om92ZXJzaXplQmxvY2tGb3Iodm9pZCogcHRyKQoreworICAgIHJldHVybiBy
ZWludGVycHJldF9jYXN0PENvcGllZEJsb2NrKj4ocmVpbnRlcnByZXRfY2FzdDxzaXplX3Q+KHB0
cikgJiBXVEY6OnBhZ2VNYXNrKCkpOworfQorCitpbmxpbmUgQ29waWVkQmxvY2sqIENvcGllZFNw
YWNlOjpibG9ja0Zvcih2b2lkKiBwdHIpCit7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
Q29waWVkQmxvY2sqPihyZWludGVycHJldF9jYXN0PHNpemVfdD4ocHRyKSAmIHNfYmxvY2tNYXNr
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2VJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2VJbmxpbmVzLmgJKHJldmlzaW9uIDEzMzM4
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlSW5saW5lcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yMyw4ICsyMyw4IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0j
aWZuZGVmIENvcGllZFNwYWNlSW5saW5lTWV0aG9kc19oCi0jZGVmaW5lIENvcGllZFNwYWNlSW5s
aW5lTWV0aG9kc19oCisjaWZuZGVmIENvcGllZFNwYWNlSW5saW5lc19oCisjZGVmaW5lIENvcGll
ZFNwYWNlSW5saW5lc19oCiAKICNpbmNsdWRlICJDb3BpZWRCbG9jay5oIgogI2luY2x1ZGUgIkNv
cGllZFNwYWNlLmgiCkBAIC0xODIsNCArMTgyLDUgQEAgaW5saW5lIENvcGllZEJsb2NrKiBDb3Bp
ZWRTcGFjZTo6YmxvY2tGbwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAotI2VuZGlmCisjZW5kaWYg
Ly8gQ29waWVkU3BhY2VJbmxpbmVzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQ29weVZpc2l0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0NvcHlWaXNpdG9yLmNwcAkocmV2aXNpb24gMTMzMzkyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvQ29weVZpc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ29weVZpc2l0b3IuaCIKIAotI2lu
Y2x1ZGUgIkNvcHlWaXNpdG9ySW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkNvcHlWaXNpdG9y
SW5saW5lcy5oIgogI2luY2x1ZGUgIkdDVGhyZWFkU2hhcmVkRGF0YS5oIgogI2luY2x1ZGUgIkpT
Q2VsbC5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9Db3B5VmlzaXRvcklubGluZU1ldGhvZHMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5VmlzaXRvcklubGluZU1ldGhvZHMuaAkocmV2aXNpb24g
MTMzMzkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVZpc2l0b3JJbmxpbmVN
ZXRob2RzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTE5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aWZuZGVmIENvcHlWaXNpdG9ySW5saW5lTWV0aG9kc19oCi0jZGVmaW5lIENvcHlWaXNpdG9ySW5s
aW5lTWV0aG9kc19oCi0KLSNpbmNsdWRlICJDbGFzc0luZm8uaCIKLSNpbmNsdWRlICJDb3B5Vmlz
aXRvci5oIgotI2luY2x1ZGUgIkdDVGhyZWFkU2hhcmVkRGF0YS5oIgotI2luY2x1ZGUgIkpTQ2Vs
bC5oIgotI2luY2x1ZGUgIkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LmgiCi0KLW5hbWVzcGFjZSBKU0Mg
ewotCi1jbGFzcyBHQ0NvcHlQaGFzZUZ1bmN0b3IgOiBwdWJsaWMgTWFya2VkQmxvY2s6OlZvaWRG
dW5jdG9yIHsKLXB1YmxpYzoKLSAgICBHQ0NvcHlQaGFzZUZ1bmN0b3IoQ29weVZpc2l0b3ImIHZp
c2l0b3IpCi0gICAgICAgIDogbV92aXNpdG9yKHZpc2l0b3IpCi0gICAgewotICAgIH0KLQotICAg
IHZvaWQgb3BlcmF0b3IoKShKU0NlbGwqIGNlbGwpCi0gICAgewotICAgICAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IGNlbGwtPnN0cnVjdHVyZSgpOwotICAgICAgICBpZiAoIXN0cnVjdHVyZS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSAmJiAhaGFzSW5kZXhlZFByb3BlcnRpZXMoc3RydWN0dXJlLT5p
bmRleGluZ1R5cGUoKSkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIEFTU0VSVChzdHJ1
Y3R1cmUtPmNsYXNzSW5mbygpLT5tZXRob2RUYWJsZS5jb3B5QmFja2luZ1N0b3JlID09IEpTT2Jq
ZWN0Ojpjb3B5QmFja2luZ1N0b3JlKTsKLSAgICAgICAgSlNPYmplY3Q6OmNvcHlCYWNraW5nU3Rv
cmUoY2VsbCwgbV92aXNpdG9yKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgQ29weVZpc2l0b3Im
IG1fdmlzaXRvcjsKLX07Ci0KLWlubGluZSBib29sIENvcHlWaXNpdG9yOjpjaGVja0lmU2hvdWxk
Q29weSh2b2lkKiBvbGRQdHIsIHNpemVfdCBieXRlcykKLXsKLSAgICBpZiAoQ29waWVkU3BhY2U6
OmlzT3ZlcnNpemUoYnl0ZXMpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoQ29w
aWVkU3BhY2U6OmJsb2NrRm9yKG9sZFB0ciktPmlzUGlubmVkKCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1pbmxpbmUgdm9pZCogQ29weVZpc2l0b3I6
OmFsbG9jYXRlTmV3U3BhY2Uoc2l6ZV90IGJ5dGVzKQotewotICAgIHZvaWQqIHJlc3VsdCA9IDA7
IC8vIENvbXBpbGVycyBkb24ndCByZWFsaXplIHRoYXQgdGhpcyB3aWxsIGJlIGFzc2lnbmVkLgot
ICAgIGlmIChMSUtFTFkobV9jb3BpZWRBbGxvY2F0b3IudHJ5QWxsb2NhdGUoYnl0ZXMsICZyZXN1
bHQpKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAKLSAgICByZXN1bHQgPSBhbGxvY2F0
ZU5ld1NwYWNlU2xvdyhieXRlcyk7Ci0gICAgQVNTRVJUKHJlc3VsdCk7Ci0gICAgcmV0dXJuIHJl
c3VsdDsKLX0gICAgICAgCi0KLWlubGluZSB2b2lkKiBDb3B5VmlzaXRvcjo6YWxsb2NhdGVOZXdT
cGFjZVNsb3coc2l6ZV90IGJ5dGVzKQotewotICAgIENvcGllZEJsb2NrKiBuZXdCbG9jayA9IDA7
Ci0gICAgbV9zaGFyZWQubV9jb3BpZWRTcGFjZS0+ZG9uZUZpbGxpbmdCbG9jayhtX2NvcGllZEFs
bG9jYXRvci5yZXNldEN1cnJlbnRCbG9jaygpLCAmbmV3QmxvY2spOwotICAgIG1fY29waWVkQWxs
b2NhdG9yLnNldEN1cnJlbnRCbG9jayhuZXdCbG9jayk7Ci0KLSAgICB2b2lkKiByZXN1bHQgPSAw
OwotICAgIENoZWNrZWRCb29sZWFuIGRpZFN1Y2NlZWQgPSBtX2NvcGllZEFsbG9jYXRvci50cnlB
bGxvY2F0ZShieXRlcywgJnJlc3VsdCk7Ci0gICAgQVNTRVJUKGRpZFN1Y2NlZWQpOwotICAgIHJl
dHVybiByZXN1bHQ7Ci19Ci0KLWlubGluZSB2b2lkIENvcHlWaXNpdG9yOjpzdGFydENvcHlpbmco
KQotewotICAgIEFTU0VSVCghbV9jb3BpZWRBbGxvY2F0b3IuaXNWYWxpZCgpKTsKLSAgICBDb3Bp
ZWRCbG9jayogYmxvY2sgPSAwOwotICAgIG1fc2hhcmVkLm1fY29waWVkU3BhY2UtPmRvbmVGaWxs
aW5nQmxvY2sobV9jb3BpZWRBbGxvY2F0b3IucmVzZXRDdXJyZW50QmxvY2soKSwgJmJsb2NrKTsK
LSAgICBtX2NvcGllZEFsbG9jYXRvci5zZXRDdXJyZW50QmxvY2soYmxvY2spOwotfQotCi1pbmxp
bmUgdm9pZCBDb3B5VmlzaXRvcjo6ZG9uZUNvcHlpbmcoKQotewotICAgIGlmICghbV9jb3BpZWRB
bGxvY2F0b3IuaXNWYWxpZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3NoYXJlZC5tX2Nv
cGllZFNwYWNlLT5kb25lRmlsbGluZ0Jsb2NrKG1fY29waWVkQWxsb2NhdG9yLnJlc2V0Q3VycmVu
dEJsb2NrKCksIDApOwotfQotCi1pbmxpbmUgdm9pZCBDb3B5VmlzaXRvcjo6ZGlkQ29weSh2b2lk
KiBwdHIsIHNpemVfdCBieXRlcykKLXsKLSAgICBBU1NFUlQoIUNvcGllZFNwYWNlOjppc092ZXJz
aXplKGJ5dGVzKSk7Ci0gICAgQ29waWVkQmxvY2sqIGJsb2NrID0gQ29waWVkU3BhY2U6OmJsb2Nr
Rm9yKHB0cik7Ci0gICAgQVNTRVJUKCFibG9jay0+aXNQaW5uZWQoKSk7Ci0KLSAgICBpZiAoYmxv
Y2stPmRpZEV2YWN1YXRlQnl0ZXMoYnl0ZXMpKQotICAgICAgICBtX3NoYXJlZC5tX2NvcGllZFNw
YWNlLT5yZWN5Y2xlRXZhY3VhdGVkQmxvY2soYmxvY2spOwotfQotCi19IC8vIG5hbWVzcGFjZSBK
U0MKLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5VmlzaXRv
cklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5
VmlzaXRvcklubGluZXMuaAkocmV2aXNpb24gMTMzMzg5KQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9Db3B5VmlzaXRvcklubGluZU1ldGhvZHMuaDoxMzMzODkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5VmlzaXRvcklubGluZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDExOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ29weVZpc2l0b3JJbmxpbmVN
ZXRob2RzX2gKKyNkZWZpbmUgQ29weVZpc2l0b3JJbmxpbmVNZXRob2RzX2gKKworI2luY2x1ZGUg
IkNsYXNzSW5mby5oIgorI2luY2x1ZGUgIkNvcHlWaXNpdG9yLmgiCisjaW5jbHVkZSAiR0NUaHJl
YWRTaGFyZWREYXRhLmgiCisjaW5jbHVkZSAiSlNDZWxsLmgiCisjaW5jbHVkZSAiSlNEZXN0cnVj
dGlibGVPYmplY3QuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEdDQ29weVBoYXNlRnVu
Y3RvciA6IHB1YmxpYyBNYXJrZWRCbG9jazo6Vm9pZEZ1bmN0b3IgeworcHVibGljOgorICAgIEdD
Q29weVBoYXNlRnVuY3RvcihDb3B5VmlzaXRvciYgdmlzaXRvcikKKyAgICAgICAgOiBtX3Zpc2l0
b3IodmlzaXRvcikKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBvcGVyYXRvcigpKEpTQ2VsbCog
Y2VsbCkKKyAgICB7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gY2VsbC0+c3RydWN0
dXJlKCk7CisgICAgICAgIGlmICghc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICYmICFo
YXNJbmRleGVkUHJvcGVydGllcyhzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgQVNTRVJUKHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCktPm1ldGhv
ZFRhYmxlLmNvcHlCYWNraW5nU3RvcmUgPT0gSlNPYmplY3Q6OmNvcHlCYWNraW5nU3RvcmUpOwor
ICAgICAgICBKU09iamVjdDo6Y29weUJhY2tpbmdTdG9yZShjZWxsLCBtX3Zpc2l0b3IpOworICAg
IH0KKworcHJpdmF0ZToKKyAgICBDb3B5VmlzaXRvciYgbV92aXNpdG9yOworfTsKKworaW5saW5l
IGJvb2wgQ29weVZpc2l0b3I6OmNoZWNrSWZTaG91bGRDb3B5KHZvaWQqIG9sZFB0ciwgc2l6ZV90
IGJ5dGVzKQoreworICAgIGlmIChDb3BpZWRTcGFjZTo6aXNPdmVyc2l6ZShieXRlcykpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChDb3BpZWRTcGFjZTo6YmxvY2tGb3Iob2xkUHRy
KS0+aXNQaW5uZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2lubGluZSB2b2lkKiBDb3B5VmlzaXRvcjo6YWxsb2NhdGVOZXdTcGFjZShzaXplX3Qg
Ynl0ZXMpCit7CisgICAgdm9pZCogcmVzdWx0ID0gMDsgLy8gQ29tcGlsZXJzIGRvbid0IHJlYWxp
emUgdGhhdCB0aGlzIHdpbGwgYmUgYXNzaWduZWQuCisgICAgaWYgKExJS0VMWShtX2NvcGllZEFs
bG9jYXRvci50cnlBbGxvY2F0ZShieXRlcywgJnJlc3VsdCkpKQorICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIAorICAgIHJlc3VsdCA9IGFsbG9jYXRlTmV3U3BhY2VTbG93KGJ5dGVzKTsKKyAg
ICBBU1NFUlQocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfSAgICAgICAKKworaW5saW5l
IHZvaWQqIENvcHlWaXNpdG9yOjphbGxvY2F0ZU5ld1NwYWNlU2xvdyhzaXplX3QgYnl0ZXMpCit7
CisgICAgQ29waWVkQmxvY2sqIG5ld0Jsb2NrID0gMDsKKyAgICBtX3NoYXJlZC5tX2NvcGllZFNw
YWNlLT5kb25lRmlsbGluZ0Jsb2NrKG1fY29waWVkQWxsb2NhdG9yLnJlc2V0Q3VycmVudEJsb2Nr
KCksICZuZXdCbG9jayk7CisgICAgbV9jb3BpZWRBbGxvY2F0b3Iuc2V0Q3VycmVudEJsb2NrKG5l
d0Jsb2NrKTsKKworICAgIHZvaWQqIHJlc3VsdCA9IDA7CisgICAgQ2hlY2tlZEJvb2xlYW4gZGlk
U3VjY2VlZCA9IG1fY29waWVkQWxsb2NhdG9yLnRyeUFsbG9jYXRlKGJ5dGVzLCAmcmVzdWx0KTsK
KyAgICBBU1NFUlQoZGlkU3VjY2VlZCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5l
IHZvaWQgQ29weVZpc2l0b3I6OnN0YXJ0Q29weWluZygpCit7CisgICAgQVNTRVJUKCFtX2NvcGll
ZEFsbG9jYXRvci5pc1ZhbGlkKCkpOworICAgIENvcGllZEJsb2NrKiBibG9jayA9IDA7CisgICAg
bV9zaGFyZWQubV9jb3BpZWRTcGFjZS0+ZG9uZUZpbGxpbmdCbG9jayhtX2NvcGllZEFsbG9jYXRv
ci5yZXNldEN1cnJlbnRCbG9jaygpLCAmYmxvY2spOworICAgIG1fY29waWVkQWxsb2NhdG9yLnNl
dEN1cnJlbnRCbG9jayhibG9jayk7Cit9CisKK2lubGluZSB2b2lkIENvcHlWaXNpdG9yOjpkb25l
Q29weWluZygpCit7CisgICAgaWYgKCFtX2NvcGllZEFsbG9jYXRvci5pc1ZhbGlkKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIG1fc2hhcmVkLm1fY29waWVkU3BhY2UtPmRvbmVGaWxsaW5nQmxv
Y2sobV9jb3BpZWRBbGxvY2F0b3IucmVzZXRDdXJyZW50QmxvY2soKSwgMCk7Cit9CisKK2lubGlu
ZSB2b2lkIENvcHlWaXNpdG9yOjpkaWRDb3B5KHZvaWQqIHB0ciwgc2l6ZV90IGJ5dGVzKQorewor
ICAgIEFTU0VSVCghQ29waWVkU3BhY2U6OmlzT3ZlcnNpemUoYnl0ZXMpKTsKKyAgICBDb3BpZWRC
bG9jayogYmxvY2sgPSBDb3BpZWRTcGFjZTo6YmxvY2tGb3IocHRyKTsKKyAgICBBU1NFUlQoIWJs
b2NrLT5pc1Bpbm5lZCgpKTsKKworICAgIGlmIChibG9jay0+ZGlkRXZhY3VhdGVCeXRlcyhieXRl
cykpCisgICAgICAgIG1fc2hhcmVkLm1fY29waWVkU3BhY2UtPnJlY3ljbGVFdmFjdWF0ZWRCbG9j
ayhibG9jayk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlWaXNpdG9ySW5saW5lcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlWaXNpdG9ySW5saW5lcy5oCShyZXZpc2lv
biAxMzMzODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5VmlzaXRvcklubGlu
ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsOCArMjMsOCBAQAogICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgQ29weVZpc2l0b3JJbmxpbmVNZXRob2Rz
X2gKLSNkZWZpbmUgQ29weVZpc2l0b3JJbmxpbmVNZXRob2RzX2gKKyNpZm5kZWYgQ29weVZpc2l0
b3JJbmxpbmVzX2gKKyNkZWZpbmUgQ29weVZpc2l0b3JJbmxpbmVzX2gKIAogI2luY2x1ZGUgIkNs
YXNzSW5mby5oIgogI2luY2x1ZGUgIkNvcHlWaXNpdG9yLmgiCkBAIC0xMTYsNCArMTE2LDUgQEAg
aW5saW5lIHZvaWQgQ29weVZpc2l0b3I6OmRpZENvcHkodm9pZCogcAogCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKIAotI2VuZGlmCisjZW5kaWYgLy8gQ29weVZpc2l0b3JJbmxpbmVzX2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NUaHJlYWQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDVGhyZWFkLmNwcAkocmV2aXNpb24gMTMzMzkyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NUaHJlYWQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNyw3ICsyNyw3IEBACiAjaW5jbHVkZSAiR0NUaHJlYWQuaCIKIAogI2luY2x1ZGUgIkNv
cHlWaXNpdG9yLmgiCi0jaW5jbHVkZSAiQ29weVZpc2l0b3JJbmxpbmVNZXRob2RzLmgiCisjaW5j
bHVkZSAiQ29weVZpc2l0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiR0NUaHJlYWRTaGFyZWREYXRh
LmgiCiAjaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5o
PgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NUaHJlYWRTaGFyZWREYXRhLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1RocmVhZFNoYXJl
ZERhdGEuY3BwCShyZXZpc2lvbiAxMzMzOTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9HQ1RocmVhZFNoYXJlZERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNywxMiArMjcsMTIg
QEAKICNpbmNsdWRlICJHQ1RocmVhZFNoYXJlZERhdGEuaCIKIAogI2luY2x1ZGUgIkNvcHlWaXNp
dG9yLmgiCi0jaW5jbHVkZSAiQ29weVZpc2l0b3JJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAi
Q29weVZpc2l0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiR0NUaHJlYWQuaCIKICNpbmNsdWRlICJK
U0dsb2JhbERhdGEuaCIKICNpbmNsdWRlICJNYXJrU3RhY2suaCIKICNpbmNsdWRlICJTbG90Vmlz
aXRvci5oIgotI2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUg
IlNsb3RWaXNpdG9ySW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlU3RhY2suY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hhbmRsZVN0YWNrLmNwcAkocmV2aXNpb24gMTMzMzkyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlU3RhY2suY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNyw4ICsyNyw4IEBACiAjaW5jbHVkZSAiSGFuZGxlU3RhY2suaCIKIAogI2luY2x1
ZGUgIkhlYXBSb290VmlzaXRvci5oIgotI2luY2x1ZGUgIkpTVmFsdWVJbmxpbmVNZXRob2RzLmgi
CiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKKyNpbmNsdWRlICJKU1ZhbHVlSW5saW5lcy5oIgogCiBu
YW1lc3BhY2UgSlNDIHsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJl
dmlzaW9uIDEzMzM5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNCw4ICsyNCw4IEBACiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAj
aW5jbHVkZSAiQ29uc2VydmF0aXZlUm9vdHMuaCIKICNpbmNsdWRlICJDb3BpZWRTcGFjZS5oIgot
I2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oIgotI2luY2x1ZGUgIkNvcHlWaXNp
dG9ySW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lcy5oIgorI2lu
Y2x1ZGUgIkNvcHlWaXNpdG9ySW5saW5lcy5oIgogI2luY2x1ZGUgIkdDQWN0aXZpdHlDYWxsYmFj
ay5oIgogI2luY2x1ZGUgIkhlYXBSb290VmlzaXRvci5oIgogI2luY2x1ZGUgIkhlYXBTdGF0aXN0
aWNzLmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwUm9vdFZpc2l0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwUm9vdFZpc2l0
b3IuaAkocmV2aXNpb24gMTMzMzkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVh
cFJvb3RWaXNpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKICNkZWZpbmUg
SGVhcFJvb3RWaXNpdG9yX2gKIAogI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCi0jaW5jbHVkZSAi
U2xvdFZpc2l0b3JJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVz
LmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJrU3RhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtTdGFjay5jcHAJKHJldmlzaW9uIDEzMzM5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtTdGFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDE4ICsyNSwxOCBAQAog
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiTWFya1N0YWNrLmgiCi0jaW5jbHVkZSAi
TWFya1N0YWNrSW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIk1hcmtTdGFja0lubGluZXMuaCIK
IAotI2luY2x1ZGUgIkNvcGllZFNwYWNlLmgiCi0jaW5jbHVkZSAiQ29waWVkU3BhY2VJbmxpbmVN
ZXRob2RzLmgiCiAjaW5jbHVkZSAiQ29uc2VydmF0aXZlUm9vdHMuaCIKKyNpbmNsdWRlICJDb3Bp
ZWRTcGFjZS5oIgorI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lcy5oIgogI2luY2x1ZGUgIkhl
YXAuaCIKICNpbmNsdWRlICJPcHRpb25zLmgiCiAjaW5jbHVkZSAiSlNBcnJheS5oIgogI2luY2x1
ZGUgIkpTQ2VsbC5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAKLSNpbmNsdWRlICJTbG90Vmlz
aXRvcklubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKICNp
bmNsdWRlICJTdHJ1Y3R1cmUuaCIKICNpbmNsdWRlICJXcml0ZUJhcnJpZXIuaCIKICNpbmNsdWRl
IDx3dGYvQXRvbWljcy5oPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0
YWNrSW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtTdGFja0lubGluZU1ldGhvZHMuaAkocmV2aXNpb24gMTMzMzkyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrSW5saW5lTWV0aG9kcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDExMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDExIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgTWFya1N0YWNrSW5saW5lTWV0aG9kc19oCi0jZGVm
aW5lIE1hcmtTdGFja0lubGluZU1ldGhvZHNfaAotCi0jaW5jbHVkZSAiR0NUaHJlYWRTaGFyZWRE
YXRhLmgiCi0jaW5jbHVkZSAiTWFya1N0YWNrLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1pbmxp
bmUgc2l6ZV90IE1hcmtTdGFja0FycmF5Ojpwb3N0SW5jVG9wKCkKLXsKLSAgICBzaXplX3QgcmVz
dWx0ID0gbV90b3ArKzsKLSAgICBBU1NFUlQocmVzdWx0ID09IG1fdG9wU2VnbWVudC0+bV90b3Ar
Kyk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLSAgICAgICAgCi1pbmxpbmUgc2l6ZV90IE1hcmtT
dGFja0FycmF5OjpwcmVEZWNUb3AoKQotewotICAgIHNpemVfdCByZXN1bHQgPSAtLW1fdG9wOwot
ICAgIEFTU0VSVChyZXN1bHQgPT0gLS1tX3RvcFNlZ21lbnQtPm1fdG9wKTsKLSAgICByZXR1cm4g
cmVzdWx0OwotfQotICAgICAgICAKLWlubGluZSB2b2lkIE1hcmtTdGFja0FycmF5OjpzZXRUb3BG
b3JGdWxsU2VnbWVudCgpCi17Ci0gICAgQVNTRVJUKG1fdG9wU2VnbWVudC0+bV90b3AgPT0gbV9z
ZWdtZW50Q2FwYWNpdHkpOwotICAgIG1fdG9wID0gbV9zZWdtZW50Q2FwYWNpdHk7Ci19Ci0KLWlu
bGluZSB2b2lkIE1hcmtTdGFja0FycmF5OjpzZXRUb3BGb3JFbXB0eVNlZ21lbnQoKQotewotICAg
IEFTU0VSVCghbV90b3BTZWdtZW50LT5tX3RvcCk7Ci0gICAgbV90b3AgPSAwOwotfQotCi1pbmxp
bmUgc2l6ZV90IE1hcmtTdGFja0FycmF5Ojp0b3AoKQotewotICAgIEFTU0VSVChtX3RvcCA9PSBt
X3RvcFNlZ21lbnQtPm1fdG9wKTsKLSAgICByZXR1cm4gbV90b3A7Ci19Ci0KLSNpZiBBU1NFUlRf
RElTQUJMRUQKLWlubGluZSB2b2lkIE1hcmtTdGFja0FycmF5Ojp2YWxpZGF0ZVByZXZpb3VzKCkg
eyB9Ci0jZWxzZQotaW5saW5lIHZvaWQgTWFya1N0YWNrQXJyYXk6OnZhbGlkYXRlUHJldmlvdXMo
KQotewotICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKLSAgICBmb3IgKE1hcmtTdGFja1NlZ21lbnQq
IGN1cnJlbnQgPSBtX3RvcFNlZ21lbnQtPm1fcHJldmlvdXM7IGN1cnJlbnQ7IGN1cnJlbnQgPSBj
dXJyZW50LT5tX3ByZXZpb3VzKQotICAgICAgICBjb3VudCsrOwotICAgIEFTU0VSVChjb3VudCA9
PSBtX251bWJlck9mUHJldmlvdXNTZWdtZW50cyk7Ci19Ci0jZW5kaWYKLQotaW5saW5lIHZvaWQg
TWFya1N0YWNrQXJyYXk6OmFwcGVuZChjb25zdCBKU0NlbGwqIGNlbGwpCi17Ci0gICAgaWYgKG1f
dG9wID09IG1fc2VnbWVudENhcGFjaXR5KQotICAgICAgICBleHBhbmQoKTsKLSAgICBtX3RvcFNl
Z21lbnQtPmRhdGEoKVtwb3N0SW5jVG9wKCldID0gY2VsbDsKLX0KLQotaW5saW5lIGJvb2wgTWFy
a1N0YWNrQXJyYXk6OmNhblJlbW92ZUxhc3QoKQotewotICAgIHJldHVybiAhIW1fdG9wOwotfQot
Ci1pbmxpbmUgY29uc3QgSlNDZWxsKiBNYXJrU3RhY2tBcnJheTo6cmVtb3ZlTGFzdCgpCi17Ci0g
ICAgcmV0dXJuIG1fdG9wU2VnbWVudC0+ZGF0YSgpW3ByZURlY1RvcCgpXTsKLX0KLQotaW5saW5l
IGJvb2wgTWFya1N0YWNrQXJyYXk6OmlzRW1wdHkoKQotewotICAgIGlmIChtX3RvcCkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChtX3RvcFNlZ21lbnQtPm1fcHJldmlvdXMpIHsKLSAg
ICAgICAgQVNTRVJUKG1fdG9wU2VnbWVudC0+bV9wcmV2aW91cy0+bV90b3AgPT0gbV9zZWdtZW50
Q2FwYWNpdHkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVl
OwotfQotCi1pbmxpbmUgc2l6ZV90IE1hcmtTdGFja0FycmF5OjpzaXplKCkKLXsKLSAgICByZXR1
cm4gbV90b3AgKyBtX3NlZ21lbnRDYXBhY2l0eSAqIG1fbnVtYmVyT2ZQcmV2aW91c1NlZ21lbnRz
OwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJrU3RhY2tJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrSW5saW5lcy5oCShyZXZpc2lvbiAxMzMzODkpCShm
cm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFja0lubGluZU1ldGhvZHMuaDox
MzMzODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2tJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDksIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBNYXJrU3RhY2tJbmxpbmVNZXRo
b2RzX2gKKyNkZWZpbmUgTWFya1N0YWNrSW5saW5lTWV0aG9kc19oCisKKyNpbmNsdWRlICJHQ1Ro
cmVhZFNoYXJlZERhdGEuaCIKKyNpbmNsdWRlICJNYXJrU3RhY2suaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK2lubGluZSBzaXplX3QgTWFya1N0YWNrQXJyYXk6OnBvc3RJbmNUb3AoKQoreworICAg
IHNpemVfdCByZXN1bHQgPSBtX3RvcCsrOworICAgIEFTU0VSVChyZXN1bHQgPT0gbV90b3BTZWdt
ZW50LT5tX3RvcCsrKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorICAgICAgICAKK2lubGluZSBz
aXplX3QgTWFya1N0YWNrQXJyYXk6OnByZURlY1RvcCgpCit7CisgICAgc2l6ZV90IHJlc3VsdCA9
IC0tbV90b3A7CisgICAgQVNTRVJUKHJlc3VsdCA9PSAtLW1fdG9wU2VnbWVudC0+bV90b3ApOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisgICAgICAgIAoraW5saW5lIHZvaWQgTWFya1N0YWNrQXJy
YXk6OnNldFRvcEZvckZ1bGxTZWdtZW50KCkKK3sKKyAgICBBU1NFUlQobV90b3BTZWdtZW50LT5t
X3RvcCA9PSBtX3NlZ21lbnRDYXBhY2l0eSk7CisgICAgbV90b3AgPSBtX3NlZ21lbnRDYXBhY2l0
eTsKK30KKworaW5saW5lIHZvaWQgTWFya1N0YWNrQXJyYXk6OnNldFRvcEZvckVtcHR5U2VnbWVu
dCgpCit7CisgICAgQVNTRVJUKCFtX3RvcFNlZ21lbnQtPm1fdG9wKTsKKyAgICBtX3RvcCA9IDA7
Cit9CisKK2lubGluZSBzaXplX3QgTWFya1N0YWNrQXJyYXk6OnRvcCgpCit7CisgICAgQVNTRVJU
KG1fdG9wID09IG1fdG9wU2VnbWVudC0+bV90b3ApOworICAgIHJldHVybiBtX3RvcDsKK30KKwor
I2lmIEFTU0VSVF9ESVNBQkxFRAoraW5saW5lIHZvaWQgTWFya1N0YWNrQXJyYXk6OnZhbGlkYXRl
UHJldmlvdXMoKSB7IH0KKyNlbHNlCitpbmxpbmUgdm9pZCBNYXJrU3RhY2tBcnJheTo6dmFsaWRh
dGVQcmV2aW91cygpCit7CisgICAgdW5zaWduZWQgY291bnQgPSAwOworICAgIGZvciAoTWFya1N0
YWNrU2VnbWVudCogY3VycmVudCA9IG1fdG9wU2VnbWVudC0+bV9wcmV2aW91czsgY3VycmVudDsg
Y3VycmVudCA9IGN1cnJlbnQtPm1fcHJldmlvdXMpCisgICAgICAgIGNvdW50Kys7CisgICAgQVNT
RVJUKGNvdW50ID09IG1fbnVtYmVyT2ZQcmV2aW91c1NlZ21lbnRzKTsKK30KKyNlbmRpZgorCitp
bmxpbmUgdm9pZCBNYXJrU3RhY2tBcnJheTo6YXBwZW5kKGNvbnN0IEpTQ2VsbCogY2VsbCkKK3sK
KyAgICBpZiAobV90b3AgPT0gbV9zZWdtZW50Q2FwYWNpdHkpCisgICAgICAgIGV4cGFuZCgpOwor
ICAgIG1fdG9wU2VnbWVudC0+ZGF0YSgpW3Bvc3RJbmNUb3AoKV0gPSBjZWxsOworfQorCitpbmxp
bmUgYm9vbCBNYXJrU3RhY2tBcnJheTo6Y2FuUmVtb3ZlTGFzdCgpCit7CisgICAgcmV0dXJuICEh
bV90b3A7Cit9CisKK2lubGluZSBjb25zdCBKU0NlbGwqIE1hcmtTdGFja0FycmF5OjpyZW1vdmVM
YXN0KCkKK3sKKyAgICByZXR1cm4gbV90b3BTZWdtZW50LT5kYXRhKClbcHJlRGVjVG9wKCldOwor
fQorCitpbmxpbmUgYm9vbCBNYXJrU3RhY2tBcnJheTo6aXNFbXB0eSgpCit7CisgICAgaWYgKG1f
dG9wKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fdG9wU2VnbWVudC0+bV9wcmV2
aW91cykgeworICAgICAgICBBU1NFUlQobV90b3BTZWdtZW50LT5tX3ByZXZpb3VzLT5tX3RvcCA9
PSBtX3NlZ21lbnRDYXBhY2l0eSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK2lubGluZSBzaXplX3QgTWFya1N0YWNrQXJyYXk6OnNpemUoKQor
eworICAgIHJldHVybiBtX3RvcCArIG1fc2VnbWVudENhcGFjaXR5ICogbV9udW1iZXJPZlByZXZp
b3VzU2VnbWVudHM7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFja0lubGluZXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2tJbmxpbmVzLmgJKHJldmlzaW9u
IDEzMzM4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFja0lubGluZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMjMsOCArMjMsOCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8K
IAotI2lmbmRlZiBNYXJrU3RhY2tJbmxpbmVNZXRob2RzX2gKLSNkZWZpbmUgTWFya1N0YWNrSW5s
aW5lTWV0aG9kc19oCisjaWZuZGVmIE1hcmtTdGFja0lubGluZXNfaAorI2RlZmluZSBNYXJrU3Rh
Y2tJbmxpbmVzX2gKIAogI2luY2x1ZGUgIkdDVGhyZWFkU2hhcmVkRGF0YS5oIgogI2luY2x1ZGUg
Ik1hcmtTdGFjay5oIgpAQCAtMTEwLDQgKzExMCw1IEBAIGlubGluZSBzaXplX3QgTWFya1N0YWNr
QXJyYXk6OnNpemUoKQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAotI2VuZGlmCisjZW5kaWYgLy8g
TWFya1N0YWNrSW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Ns
b3RWaXNpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9T
bG90VmlzaXRvci5jcHAJKHJldmlzaW9uIDEzMzM5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMyw3ICszLDcgQEAKIAog
I2luY2x1ZGUgIkNvbnNlcnZhdGl2ZVJvb3RzLmgiCiAjaW5jbHVkZSAiQ29waWVkU3BhY2UuaCIK
LSNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJDb3BpZWRT
cGFjZUlubGluZXMuaCIKICNpbmNsdWRlICJHQ1RocmVhZC5oIgogI2luY2x1ZGUgIkpTQXJyYXku
aCIKICNpbmNsdWRlICJKU0Rlc3RydWN0aWJsZU9iamVjdC5oIgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCShyZXZpc2lvbiAxMzMzOTIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3
ICsyNyw3IEBACiAjZGVmaW5lIFNsb3RWaXNpdG9yX2gKIAogI2luY2x1ZGUgIkhhbmRsZVR5cGVz
LmgiCi0jaW5jbHVkZSAiTWFya1N0YWNrSW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIk1hcmtT
dGFja0lubGluZXMuaCIKIAogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVNZXRob2RzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxp
bmVNZXRob2RzLmgJKHJldmlzaW9uIDEzMzM5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1Nsb3RWaXNpdG9ySW5saW5lTWV0aG9kcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE3NCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBTbG90VmlzaXRvcklubGluZU1ldGhvZHNfaAot
I2RlZmluZSBTbG90VmlzaXRvcklubGluZU1ldGhvZHNfaAotCi0jaW5jbHVkZSAiQ29waWVkU3Bh
Y2VJbmxpbmVNZXRob2RzLmgiCi0jaW5jbHVkZSAiT3B0aW9ucy5oIgotI2luY2x1ZGUgIlNsb3RW
aXNpdG9yLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1BTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZp
c2l0b3I6OmFwcGVuZChKU1ZhbHVlKiBzbG90LCBzaXplX3QgY291bnQpCi17Ci0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgIEpTVmFsdWUmIHZhbHVlID0g
c2xvdFtpXTsKLSAgICAgICAgaW50ZXJuYWxBcHBlbmQodmFsdWUpOwotICAgIH0KLX0KLQotdGVt
cGxhdGU8dHlwZW5hbWUgVD4KLWlubGluZSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRVbmJhcnJp
ZXJlZFBvaW50ZXIoVCoqIHNsb3QpCi17Ci0gICAgQVNTRVJUKHNsb3QpOwotICAgIEpTQ2VsbCog
Y2VsbCA9ICpzbG90OwotICAgIGludGVybmFsQXBwZW5kKGNlbGwpOwotfQotCi1BTFdBWVNfSU5M
SU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZChKU1ZhbHVlKiBzbG90KQotewotICAgIEFTU0VS
VChzbG90KTsKLSAgICBpbnRlcm5hbEFwcGVuZCgqc2xvdCk7Ci19Ci0KLUFMV0FZU19JTkxJTkUg
dm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kVW5iYXJyaWVyZWRWYWx1ZShKU1ZhbHVlKiBzbG90KQot
ewotICAgIEFTU0VSVChzbG90KTsKLSAgICBpbnRlcm5hbEFwcGVuZCgqc2xvdCk7Ci19Ci0KLUFM
V0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kKEpTQ2VsbCoqIHNsb3QpCi17Ci0g
ICAgQVNTRVJUKHNsb3QpOwotICAgIGludGVybmFsQXBwZW5kKCpzbG90KTsKLX0KLQotQUxXQVlT
X0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjppbnRlcm5hbEFwcGVuZChKU1ZhbHVlIHZhbHVlKQot
ewotICAgIGlmICghdmFsdWUgfHwgIXZhbHVlLmlzQ2VsbCgpKQotICAgICAgICByZXR1cm47Ci0g
ICAgaW50ZXJuYWxBcHBlbmQodmFsdWUuYXNDZWxsKCkpOwotfQotCi1pbmxpbmUgdm9pZCBTbG90
VmlzaXRvcjo6YWRkV2Vha1JlZmVyZW5jZUhhcnZlc3RlcihXZWFrUmVmZXJlbmNlSGFydmVzdGVy
KiB3ZWFrUmVmZXJlbmNlSGFydmVzdGVyKQotewotICAgIG1fc2hhcmVkLm1fd2Vha1JlZmVyZW5j
ZUhhcnZlc3RlcnMuYWRkVGhyZWFkU2FmZSh3ZWFrUmVmZXJlbmNlSGFydmVzdGVyKTsKLX0KLQot
aW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OmFkZFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIoVW5jb25k
aXRpb25hbEZpbmFsaXplciogdW5jb25kaXRpb25hbEZpbmFsaXplcikKLXsKLSAgICBtX3NoYXJl
ZC5tX3VuY29uZGl0aW9uYWxGaW5hbGl6ZXJzLmFkZFRocmVhZFNhZmUodW5jb25kaXRpb25hbEZp
bmFsaXplcik7Ci19Ci0KLWlubGluZSB2b2lkIFNsb3RWaXNpdG9yOjphZGRPcGFxdWVSb290KHZv
aWQqIHJvb3QpCi17Ci0jaWYgRU5BQkxFKFBBUkFMTEVMX0dDKQotICAgIGlmIChPcHRpb25zOjpu
dW1iZXJPZkdDTWFya2VycygpID09IDEpIHsKLSAgICAgICAgLy8gUHV0IGRpcmVjdGx5IGludG8g
dGhlIHNoYXJlZCBIYXNoU2V0LgotICAgICAgICBtX3NoYXJlZC5tX29wYXF1ZVJvb3RzLmFkZChy
b290KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvLyBQdXQgaW50byB0aGUgbG9jYWwg
c2V0LCBidXQgbWVyZ2Ugd2l0aCB0aGUgc2hhcmVkIG9uZSBldmVyeSBvbmNlIGluCi0gICAgLy8g
YSB3aGlsZSB0byBtYWtlIHN1cmUgdGhhdCB0aGUgbG9jYWwgc2V0cyBkb24ndCBncm93IHRvbyBs
YXJnZS4KLSAgICBtZXJnZU9wYXF1ZVJvb3RzSWZQcm9maXRhYmxlKCk7Ci0gICAgbV9vcGFxdWVS
b290cy5hZGQocm9vdCk7Ci0jZWxzZQotICAgIG1fb3BhcXVlUm9vdHMuYWRkKHJvb3QpOwotI2Vu
ZGlmCi19Ci0KLWlubGluZSBib29sIFNsb3RWaXNpdG9yOjpjb250YWluc09wYXF1ZVJvb3Qodm9p
ZCogcm9vdCkKLXsKLSAgICBBU1NFUlQoIW1faXNJblBhcmFsbGVsTW9kZSk7Ci0jaWYgRU5BQkxF
KFBBUkFMTEVMX0dDKQotICAgIEFTU0VSVChtX29wYXF1ZVJvb3RzLmlzRW1wdHkoKSk7Ci0gICAg
cmV0dXJuIG1fc2hhcmVkLm1fb3BhcXVlUm9vdHMuY29udGFpbnMocm9vdCk7Ci0jZWxzZQotICAg
IHJldHVybiBtX29wYXF1ZVJvb3RzLmNvbnRhaW5zKHJvb3QpOwotI2VuZGlmCi19Ci0KLWlubGlu
ZSBpbnQgU2xvdFZpc2l0b3I6Om9wYXF1ZVJvb3RDb3VudCgpCi17Ci0gICAgQVNTRVJUKCFtX2lz
SW5QYXJhbGxlbE1vZGUpOwotI2lmIEVOQUJMRShQQVJBTExFTF9HQykKLSAgICBBU1NFUlQobV9v
cGFxdWVSb290cy5pc0VtcHR5KCkpOwotICAgIHJldHVybiBtX3NoYXJlZC5tX29wYXF1ZVJvb3Rz
LnNpemUoKTsKLSNlbHNlCi0gICAgcmV0dXJuIG1fb3BhcXVlUm9vdHMuc2l6ZSgpOwotI2VuZGlm
Ci19Ci0KLWlubGluZSB2b2lkIFNsb3RWaXNpdG9yOjptZXJnZU9wYXF1ZVJvb3RzSWZOZWNlc3Nh
cnkoKQotewotICAgIGlmIChtX29wYXF1ZVJvb3RzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJu
OwotICAgIG1lcmdlT3BhcXVlUm9vdHMoKTsKLX0KLSAgICAKLWlubGluZSB2b2lkIFNsb3RWaXNp
dG9yOjptZXJnZU9wYXF1ZVJvb3RzSWZQcm9maXRhYmxlKCkKLXsKLSAgICBpZiAoc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KG1fb3BhcXVlUm9vdHMuc2l6ZSgpKSA8IE9wdGlvbnM6Om9wYXF1ZVJvb3RN
ZXJnZVRocmVzaG9sZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgbWVyZ2VPcGFxdWVSb290cygp
OwotfQotICAgIAotaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OmRvbmF0ZSgpCi17Ci0gICAgQVNT
RVJUKG1faXNJblBhcmFsbGVsTW9kZSk7Ci0gICAgaWYgKE9wdGlvbnM6Om51bWJlck9mR0NNYXJr
ZXJzKCkgPT0gMSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGRvbmF0ZUtub3duUGFyYWxs
ZWwoKTsKLX0KLQotaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OmRvbmF0ZUFuZERyYWluKCkKLXsK
LSAgICBkb25hdGUoKTsKLSAgICBkcmFpbigpOwotfQotCi1pbmxpbmUgdm9pZCBTbG90VmlzaXRv
cjo6Y29weUxhdGVyKHZvaWQqIHB0ciwgc2l6ZV90IGJ5dGVzKQotewotICAgIGlmIChDb3BpZWRT
cGFjZTo6aXNPdmVyc2l6ZShieXRlcykpIHsKLSAgICAgICAgbV9zaGFyZWQubV9jb3BpZWRTcGFj
ZS0+cGluKENvcGllZFNwYWNlOjpvdmVyc2l6ZUJsb2NrRm9yKHB0cikpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgQ29waWVkQmxvY2sqIGJsb2NrID0gQ29waWVkU3BhY2U6OmJsb2Nr
Rm9yKHB0cik7Ci0gICAgaWYgKGJsb2NrLT5pc1Bpbm5lZCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBibG9jay0+cmVwb3J0TGl2ZUJ5dGVzKGJ5dGVzKTsKLQotICAgIGlmICghYmxvY2stPnNo
b3VsZEV2YWN1YXRlKCkpCi0gICAgICAgIG1fc2hhcmVkLm1fY29waWVkU3BhY2UtPnBpbihibG9j
ayk7Ci19Ci0gICAgCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIFNsb3RWaXNpdG9y
SW5saW5lTWV0aG9kc19oCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RW
aXNpdG9ySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1Nsb3RWaXNpdG9ySW5saW5lcy5oCShyZXZpc2lvbiAxMzMzODkpCShmcm9tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lTWV0aG9kcy5oOjEzMzM4OSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTbG90VmlzaXRvcklu
bGluZU1ldGhvZHNfaAorI2RlZmluZSBTbG90VmlzaXRvcklubGluZU1ldGhvZHNfaAorCisjaW5j
bHVkZSAiQ29waWVkU3BhY2VJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiT3B0aW9ucy5oIgor
I2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitBTFdBWVNfSU5M
SU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZChKU1ZhbHVlKiBzbG90LCBzaXplX3QgY291bnQp
Cit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIEpT
VmFsdWUmIHZhbHVlID0gc2xvdFtpXTsKKyAgICAgICAgaW50ZXJuYWxBcHBlbmQodmFsdWUpOwor
ICAgIH0KK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2lubGluZSB2b2lkIFNsb3RWaXNpdG9y
OjphcHBlbmRVbmJhcnJpZXJlZFBvaW50ZXIoVCoqIHNsb3QpCit7CisgICAgQVNTRVJUKHNsb3Qp
OworICAgIEpTQ2VsbCogY2VsbCA9ICpzbG90OworICAgIGludGVybmFsQXBwZW5kKGNlbGwpOwor
fQorCitBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZChKU1ZhbHVlKiBzbG90
KQoreworICAgIEFTU0VSVChzbG90KTsKKyAgICBpbnRlcm5hbEFwcGVuZCgqc2xvdCk7Cit9CisK
K0FMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kVW5iYXJyaWVyZWRWYWx1ZShK
U1ZhbHVlKiBzbG90KQoreworICAgIEFTU0VSVChzbG90KTsKKyAgICBpbnRlcm5hbEFwcGVuZCgq
c2xvdCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kKEpTQ2Vs
bCoqIHNsb3QpCit7CisgICAgQVNTRVJUKHNsb3QpOworICAgIGludGVybmFsQXBwZW5kKCpzbG90
KTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjppbnRlcm5hbEFwcGVuZChK
U1ZhbHVlIHZhbHVlKQoreworICAgIGlmICghdmFsdWUgfHwgIXZhbHVlLmlzQ2VsbCgpKQorICAg
ICAgICByZXR1cm47CisgICAgaW50ZXJuYWxBcHBlbmQodmFsdWUuYXNDZWxsKCkpOworfQorCitp
bmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6YWRkV2Vha1JlZmVyZW5jZUhhcnZlc3RlcihXZWFrUmVm
ZXJlbmNlSGFydmVzdGVyKiB3ZWFrUmVmZXJlbmNlSGFydmVzdGVyKQoreworICAgIG1fc2hhcmVk
Lm1fd2Vha1JlZmVyZW5jZUhhcnZlc3RlcnMuYWRkVGhyZWFkU2FmZSh3ZWFrUmVmZXJlbmNlSGFy
dmVzdGVyKTsKK30KKworaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OmFkZFVuY29uZGl0aW9uYWxG
aW5hbGl6ZXIoVW5jb25kaXRpb25hbEZpbmFsaXplciogdW5jb25kaXRpb25hbEZpbmFsaXplcikK
K3sKKyAgICBtX3NoYXJlZC5tX3VuY29uZGl0aW9uYWxGaW5hbGl6ZXJzLmFkZFRocmVhZFNhZmUo
dW5jb25kaXRpb25hbEZpbmFsaXplcik7Cit9CisKK2lubGluZSB2b2lkIFNsb3RWaXNpdG9yOjph
ZGRPcGFxdWVSb290KHZvaWQqIHJvb3QpCit7CisjaWYgRU5BQkxFKFBBUkFMTEVMX0dDKQorICAg
IGlmIChPcHRpb25zOjpudW1iZXJPZkdDTWFya2VycygpID09IDEpIHsKKyAgICAgICAgLy8gUHV0
IGRpcmVjdGx5IGludG8gdGhlIHNoYXJlZCBIYXNoU2V0LgorICAgICAgICBtX3NoYXJlZC5tX29w
YXF1ZVJvb3RzLmFkZChyb290KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAvLyBQdXQg
aW50byB0aGUgbG9jYWwgc2V0LCBidXQgbWVyZ2Ugd2l0aCB0aGUgc2hhcmVkIG9uZSBldmVyeSBv
bmNlIGluCisgICAgLy8gYSB3aGlsZSB0byBtYWtlIHN1cmUgdGhhdCB0aGUgbG9jYWwgc2V0cyBk
b24ndCBncm93IHRvbyBsYXJnZS4KKyAgICBtZXJnZU9wYXF1ZVJvb3RzSWZQcm9maXRhYmxlKCk7
CisgICAgbV9vcGFxdWVSb290cy5hZGQocm9vdCk7CisjZWxzZQorICAgIG1fb3BhcXVlUm9vdHMu
YWRkKHJvb3QpOworI2VuZGlmCit9CisKK2lubGluZSBib29sIFNsb3RWaXNpdG9yOjpjb250YWlu
c09wYXF1ZVJvb3Qodm9pZCogcm9vdCkKK3sKKyAgICBBU1NFUlQoIW1faXNJblBhcmFsbGVsTW9k
ZSk7CisjaWYgRU5BQkxFKFBBUkFMTEVMX0dDKQorICAgIEFTU0VSVChtX29wYXF1ZVJvb3RzLmlz
RW1wdHkoKSk7CisgICAgcmV0dXJuIG1fc2hhcmVkLm1fb3BhcXVlUm9vdHMuY29udGFpbnMocm9v
dCk7CisjZWxzZQorICAgIHJldHVybiBtX29wYXF1ZVJvb3RzLmNvbnRhaW5zKHJvb3QpOworI2Vu
ZGlmCit9CisKK2lubGluZSBpbnQgU2xvdFZpc2l0b3I6Om9wYXF1ZVJvb3RDb3VudCgpCit7Cisg
ICAgQVNTRVJUKCFtX2lzSW5QYXJhbGxlbE1vZGUpOworI2lmIEVOQUJMRShQQVJBTExFTF9HQykK
KyAgICBBU1NFUlQobV9vcGFxdWVSb290cy5pc0VtcHR5KCkpOworICAgIHJldHVybiBtX3NoYXJl
ZC5tX29wYXF1ZVJvb3RzLnNpemUoKTsKKyNlbHNlCisgICAgcmV0dXJuIG1fb3BhcXVlUm9vdHMu
c2l6ZSgpOworI2VuZGlmCit9CisKK2lubGluZSB2b2lkIFNsb3RWaXNpdG9yOjptZXJnZU9wYXF1
ZVJvb3RzSWZOZWNlc3NhcnkoKQoreworICAgIGlmIChtX29wYXF1ZVJvb3RzLmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuOworICAgIG1lcmdlT3BhcXVlUm9vdHMoKTsKK30KKyAgICAKK2lubGlu
ZSB2b2lkIFNsb3RWaXNpdG9yOjptZXJnZU9wYXF1ZVJvb3RzSWZQcm9maXRhYmxlKCkKK3sKKyAg
ICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fb3BhcXVlUm9vdHMuc2l6ZSgpKSA8IE9wdGlv
bnM6Om9wYXF1ZVJvb3RNZXJnZVRocmVzaG9sZCgpKQorICAgICAgICByZXR1cm47CisgICAgbWVy
Z2VPcGFxdWVSb290cygpOworfQorICAgIAoraW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OmRvbmF0
ZSgpCit7CisgICAgQVNTRVJUKG1faXNJblBhcmFsbGVsTW9kZSk7CisgICAgaWYgKE9wdGlvbnM6
Om51bWJlck9mR0NNYXJrZXJzKCkgPT0gMSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGRv
bmF0ZUtub3duUGFyYWxsZWwoKTsKK30KKworaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OmRvbmF0
ZUFuZERyYWluKCkKK3sKKyAgICBkb25hdGUoKTsKKyAgICBkcmFpbigpOworfQorCitpbmxpbmUg
dm9pZCBTbG90VmlzaXRvcjo6Y29weUxhdGVyKHZvaWQqIHB0ciwgc2l6ZV90IGJ5dGVzKQorewor
ICAgIGlmIChDb3BpZWRTcGFjZTo6aXNPdmVyc2l6ZShieXRlcykpIHsKKyAgICAgICAgbV9zaGFy
ZWQubV9jb3BpZWRTcGFjZS0+cGluKENvcGllZFNwYWNlOjpvdmVyc2l6ZUJsb2NrRm9yKHB0cikp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQ29waWVkQmxvY2sqIGJsb2NrID0gQ29w
aWVkU3BhY2U6OmJsb2NrRm9yKHB0cik7CisgICAgaWYgKGJsb2NrLT5pc1Bpbm5lZCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBibG9jay0+cmVwb3J0TGl2ZUJ5dGVzKGJ5dGVzKTsKKworICAg
IGlmICghYmxvY2stPnNob3VsZEV2YWN1YXRlKCkpCisgICAgICAgIG1fc2hhcmVkLm1fY29waWVk
U3BhY2UtPnBpbihibG9jayk7Cit9CisgICAgCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlm
IC8vIFNsb3RWaXNpdG9ySW5saW5lTWV0aG9kc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oCShyZXZpc2lvbiAxMzMzODkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklubGluZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjMsMTAgKzIzLDEwIEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCiAgKi8KIAotI2lmbmRlZiBTbG90VmlzaXRvcklubGluZU1ldGhvZHNfaAotI2RlZmlu
ZSBTbG90VmlzaXRvcklubGluZU1ldGhvZHNfaAorI2lmbmRlZiBTbG90VmlzaXRvcklubGluZXNf
aAorI2RlZmluZSBTbG90VmlzaXRvcklubGluZXNfaAogCi0jaW5jbHVkZSAiQ29waWVkU3BhY2VJ
bmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiQ29waWVkU3BhY2VJbmxpbmVzLmgiCiAjaW5jbHVk
ZSAiT3B0aW9ucy5oIgogI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCiAKQEAgLTE3MCw1ICsxNzAs
NSBAQCBpbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6Y29weUxhdGVyKHZvaWQqCiAgICAgCiB9IC8v
IG5hbWVzcGFjZSBKU0MKIAotI2VuZGlmIC8vIFNsb3RWaXNpdG9ySW5saW5lTWV0aG9kc19oCisj
ZW5kaWYgLy8gU2xvdFZpc2l0b3JJbmxpbmVzX2gKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9Ib3N0Q2FsbFJldHVyblZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0hvc3RDYWxsUmV0dXJuVmFsdWUuY3BwCShyZXZpc2lvbiAxMzMzOTIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0hvc3RDYWxsUmV0dXJuVmFsdWUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCiAj
aW5jbHVkZSA8d3RmL0lubGluZUFTTS5oPgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCi0jaW5jbHVk
ZSAiSlNWYWx1ZUlubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJKU1ZhbHVlSW5saW5lcy5oIgog
CiAKIG5hbWVzcGFjZSBKU0MgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2
aXNpb24gMTMzMzkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZDb21tb246
OlNTRTJDaGVja1MKICNpbmNsdWRlIDx3dGYvQ3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXIu
aD4KICNpbmNsdWRlICJERkdOb2RlLmgiIC8vIGZvciBERkdfU1VDQ0VTU19TVEFUUwogI2luY2x1
ZGUgIkludGVycHJldGVyLmgiCi0jaW5jbHVkZSAiSklUSW5saW5lTWV0aG9kcy5oIgorI2luY2x1
ZGUgIkpJVElubGluZXMuaCIKICNpbmNsdWRlICJKSVRTdHViQ2FsbC5oIgogI2luY2x1ZGUgIkpT
QXJyYXkuaCIKICNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVEFyaXRobWV0aWMzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljMzJfNjQuY3BwCShyZXZpc2lvbiAxMzMzOTIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMzMl82NC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKICNpbmNsdWRlICJKSVQuaCIKIAogI2luY2x1
ZGUgIkNvZGVCbG9jay5oIgotI2luY2x1ZGUgIkpJVElubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRl
ICJKSVRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSklUU3R1YkNhbGwuaCIKICNpbmNsdWRlICJKSVRT
dHVicy5oIgogI2luY2x1ZGUgIkpTQXJyYXkuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAkocmV2aXNpb24gMTMzMzkyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjks
NyArMjksNyBAQAogI2luY2x1ZGUgIkpJVC5oIgogCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCi0j
aW5jbHVkZSAiSklUSW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkpJVElubGluZXMuaCIKICNp
bmNsdWRlICJKSVRTdHViQ2FsbC5oIgogI2luY2x1ZGUgIkpJVFN0dWJzLmgiCiAjaW5jbHVkZSAi
SlNBcnJheS5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0
LmNwcAkocmV2aXNpb24gMTMzMzkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRD
YWxsMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBACiAjaW5jbHVkZSAi
QXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0
ZXIuaCIKLSNpbmNsdWRlICJKSVRJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiSklUSW5saW5l
cy5oIgogI2luY2x1ZGUgIkpJVFN0dWJDYWxsLmgiCiAjaW5jbHVkZSAiSlNBcnJheS5oIgogI2lu
Y2x1ZGUgIkpTRnVuY3Rpb24uaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
Q2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxs
LmNwcAkocmV2aXNpb24gMTMzMzkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRD
YWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogCiAjaW5jbHVkZSAiQXJn
dW1lbnRzLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCi0jaW5jbHVkZSAiSklUSW5saW5lTWV0
aG9kcy5oIgorI2luY2x1ZGUgIkpJVElubGluZXMuaCIKICNpbmNsdWRlICJKSVRTdHViQ2FsbC5o
IgogI2luY2x1ZGUgIkpTQXJyYXkuaCIKICNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZU1ldGhvZHMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZU1ldGhvZHMuaAkocmV2aXNpb24g
MTMzMzkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRob2RzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMTAwMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDA4LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgSklUSW5saW5lTWV0aG9kc19o
Ci0jZGVmaW5lIEpJVElubGluZU1ldGhvZHNfaAotCi0KLSNpZiBFTkFCTEUoSklUKQotCi1uYW1l
c3BhY2UgSlNDIHsKLQotQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJ
bW1lZGlhdGVEb3VibGUodW5zaWduZWQgc3JjKQotewotICAgIHJldHVybiBtX2NvZGVCbG9jay0+
aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoc3JjKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5p
c0RvdWJsZSgpOwotfQotCi1BTFdBWVNfSU5MSU5FIEpTVmFsdWUgSklUOjpnZXRDb25zdGFudE9w
ZXJhbmQodW5zaWduZWQgc3JjKQotewotICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aXNDb25zdGFu
dFJlZ2lzdGVySW5kZXgoc3JjKSk7Ci0gICAgcmV0dXJuIG1fY29kZUJsb2NrLT5nZXRDb25zdGFu
dChzcmMpOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0Q2VsbFRvQ2FsbEZy
YW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyRW50cnkg
ZW50cnkpCi17Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICBzdG9yZTMyKFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpDZWxsVGFnKSwgdGFnRm9yKGVudHJ5LCBjYWxsRnJhbWVSZWdpc3RlcikpOwot
ICAgIHN0b3JlMzIoZnJvbSwgcGF5bG9hZEZvcihlbnRyeSwgY2FsbEZyYW1lUmVnaXN0ZXIpKTsK
LSNlbHNlCi0gICAgc3RvcmU2NChmcm9tLCBhZGRyZXNzRm9yKGVudHJ5LCBjYWxsRnJhbWVSZWdp
c3RlcikpOwotI2VuZGlmCi19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRJbnRU
b0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRl
ckVudHJ5IGVudHJ5KQotewotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgc3RvcmUzMihUcnVz
dGVkSW1tMzIoSW50MzJUYWcpLCBpbnRUYWdGb3IoZW50cnksIGNhbGxGcmFtZVJlZ2lzdGVyKSk7
Ci0gICAgc3RvcmUzMihmcm9tLCBpbnRQYXlsb2FkRm9yKGVudHJ5LCBjYWxsRnJhbWVSZWdpc3Rl
cikpOwotI2Vsc2UKLSAgICBzdG9yZTY0KGZyb20sIGFkZHJlc3NGb3IoZW50cnksIGNhbGxGcmFt
ZVJlZ2lzdGVyKSk7Ci0jZW5kaWYKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1
dFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgSlNTdGFjazo6Q2FsbEZyYW1lSGVh
ZGVyRW50cnkgZW50cnkpCi17Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICBzdG9yZVB0cihm
cm9tLCBwYXlsb2FkRm9yKGVudHJ5LCBjYWxsRnJhbWVSZWdpc3RlcikpOwotI2Vsc2UKLSAgICBz
dG9yZTY0KGZyb20sIGFkZHJlc3NGb3IoZW50cnksIGNhbGxGcmFtZVJlZ2lzdGVyKSk7Ci0jZW5k
aWYKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dEltbWVkaWF0ZVRvQ2FsbEZy
YW1lSGVhZGVyKHZvaWQqIHZhbHVlLCBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJFbnRyeSBlbnRy
eSkKLXsKLSAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKHZhbHVlKSwgQWRkcmVzcyhjYWxsRnJh
bWVSZWdpc3RlciwgZW50cnkgKiBzaXplb2YoUmVnaXN0ZXIpKSk7Ci19Ci0KLUFMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OmVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKEpTU3RhY2s6OkNhbGxG
cmFtZUhlYWRlckVudHJ5IGVudHJ5LCBSZWdpc3RlcklEIHRvLCBSZWdpc3RlcklEIGZyb20pCi17
Ci0gICAgbG9hZFB0cihBZGRyZXNzKGZyb20sIGVudHJ5ICogc2l6ZW9mKFJlZ2lzdGVyKSksIHRv
KTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGtpbGxMYXN0UmVzdWx0UmVnaXN0ZXIoKTsKLSNl
bmRpZgotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0RnJvbUNhbGxGcmFtZUhl
YWRlcjMyKEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlckVudHJ5IGVudHJ5LCBSZWdpc3RlcklEIHRv
LCBSZWdpc3RlcklEIGZyb20pCi17Ci0gICAgbG9hZDMyKEFkZHJlc3MoZnJvbSwgZW50cnkgKiBz
aXplb2YoUmVnaXN0ZXIpKSwgdG8pOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAga2lsbExhc3RS
ZXN1bHRSZWdpc3RlcigpOwotI2VuZGlmCi19Ci0KLSNpZiBVU0UoSlNWQUxVRTY0KQotQUxXQVlT
X0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXI2NChKU1N0YWNrOjpD
YWxsRnJhbWVIZWFkZXJFbnRyeSBlbnRyeSwgUmVnaXN0ZXJJRCB0bywgUmVnaXN0ZXJJRCBmcm9t
KQotewotICAgIGxvYWQ2NChBZGRyZXNzKGZyb20sIGVudHJ5ICogc2l6ZW9mKFJlZ2lzdGVyKSks
IHRvKTsKLSAgICBraWxsTGFzdFJlc3VsdFJlZ2lzdGVyKCk7Ci19Ci0jZW5kaWYKLQotQUxXQVlT
X0lOTElORSB2b2lkIEpJVDo6ZW1pdExvYWRDaGFyYWN0ZXJTdHJpbmcoUmVnaXN0ZXJJRCBzcmMs
IFJlZ2lzdGVySUQgZHN0LCBKdW1wTGlzdCYgZmFpbHVyZXMpCi17Ci0gICAgZmFpbHVyZXMuYXBw
ZW5kKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhzcmMsIEpTQ2VsbDo6c3RydWN0dXJlT2Zm
c2V0KCkpLCBUcnVzdGVkSW1tUHRyKG1fZ2xvYmFsRGF0YS0+c3RyaW5nU3RydWN0dXJlLmdldCgp
KSkpOwotICAgIGZhaWx1cmVzLmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3Moc3JjLCBUaHVua0hlbHBlcnM6OmpzU3RyaW5nTGVuZ3RoT2Zmc2V0KCkpLCBU
cnVzdGVkSW1tMzIoMSkpKTsKLSAgICBsb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNy
YywgVGh1bmtIZWxwZXJzOjpqc1N0cmluZ1ZhbHVlT2Zmc2V0KCkpLCBkc3QpOwotICAgIGZhaWx1
cmVzLmFwcGVuZChicmFuY2hUZXN0MzIoWmVybywgZHN0KSk7Ci0gICAgbG9hZFB0cihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhkc3QsIFRodW5rSGVscGVyczo6c3RyaW5nSW1wbEZsYWdzT2Zmc2V0
KCkpLCByZWdUMSk7Ci0gICAgbG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhkc3QsIFRo
dW5rSGVscGVyczo6c3RyaW5nSW1wbERhdGFPZmZzZXQoKSksIGRzdCk7Ci0KLSAgICBKdW1wTGlz
dCBpczE2Qml0OwotICAgIEp1bXBMaXN0IGNvbnQ4Qml0OwotICAgIGlzMTZCaXQuYXBwZW5kKGJy
YW5jaFRlc3QzMihaZXJvLCByZWdUMSwgVHJ1c3RlZEltbTMyKFRodW5rSGVscGVyczo6c3RyaW5n
SW1wbDhCaXRGbGFnKCkpKSk7Ci0gICAgbG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZHN0
LCAwKSwgZHN0KTsKLSAgICBjb250OEJpdC5hcHBlbmQoanVtcCgpKTsKLSAgICBpczE2Qml0Lmxp
bmsodGhpcyk7Ci0gICAgbG9hZDE2KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGRzdCwgMCksIGRz
dCk7Ci0gICAgY29udDhCaXQubGluayh0aGlzKTsKLX0KLQotQUxXQVlTX0lOTElORSBKSVQ6OkNh
bGwgSklUOjplbWl0TmFrZWRDYWxsKENvZGVQdHIgZnVuY3Rpb24pCi17Ci0gICAgQVNTRVJUKG1f
Ynl0ZWNvZGVPZmZzZXQgIT0gKHVuc2lnbmVkKS0xKTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9u
bHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9i
eXRlY29kZU9mZnNldCBpcyBzZXQuCi0KLSAgICBDYWxsIG5ha2VkQ2FsbCA9IG5lYXJDYWxsKCk7
Ci0gICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChuYWtlZENhbGwsIG1fYnl0ZWNvZGVPZmZz
ZXQsIGZ1bmN0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKLSAgICByZXR1cm4gbmFrZWRDYWxs
OwotfQotCi1BTFdBWVNfSU5MSU5FIGJvb2wgSklUOjphdEp1bXBUYXJnZXQoKQotewotICAgIHdo
aWxlIChtX2p1bXBUYXJnZXRzUG9zaXRpb24gPCBtX2NvZGVCbG9jay0+bnVtYmVyT2ZKdW1wVGFy
Z2V0cygpICYmIG1fY29kZUJsb2NrLT5qdW1wVGFyZ2V0KG1fanVtcFRhcmdldHNQb3NpdGlvbikg
PD0gbV9ieXRlY29kZU9mZnNldCkgewotICAgICAgICBpZiAobV9jb2RlQmxvY2stPmp1bXBUYXJn
ZXQobV9qdW1wVGFyZ2V0c1Bvc2l0aW9uKSA9PSBtX2J5dGVjb2RlT2Zmc2V0KQotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICsrbV9qdW1wVGFyZ2V0c1Bvc2l0aW9uOwotICAgIH0K
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLSNpZiBkZWZpbmVkKEFTU0VNQkxFUl9IQVNfQ09OU1RB
TlRfUE9PTCkgJiYgQVNTRU1CTEVSX0hBU19DT05TVEFOVF9QT09MCi0KLUFMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OmJlZ2luVW5pbnRlcnJ1cHRlZFNlcXVlbmNlKGludCBpbnNuU3BhY2UsIGludCBj
b25zdFNwYWNlKQotewotI2lmIENQVShBUk1fVFJBRElUSU9OQUwpCi0jaWZuZGVmIE5ERUJVRwot
ICAgIC8vIEVuc3VyZSB0aGUgbGFiZWwgYWZ0ZXIgdGhlIHNlcXVlbmNlIGNhbiBhbHNvIGZpdAot
ICAgIGluc25TcGFjZSArPSBzaXplb2YoQVJNV29yZCk7Ci0gICAgY29uc3RTcGFjZSArPSBzaXpl
b2YodWludDY0X3QpOwotI2VuZGlmCi0KLSAgICBlbnN1cmVTcGFjZShpbnNuU3BhY2UsIGNvbnN0
U3BhY2UpOwotCi0jZWxpZiBDUFUoU0g0KQotI2lmbmRlZiBOREVCVUcKLSAgICBpbnNuU3BhY2Ug
Kz0gc2l6ZW9mKFNINFdvcmQpOwotICAgIGNvbnN0U3BhY2UgKz0gc2l6ZW9mKHVpbnQ2NF90KTsK
LSNlbmRpZgotCi0gICAgbV9hc3NlbWJsZXIuZW5zdXJlU3BhY2UoaW5zblNwYWNlICsgbV9hc3Nl
bWJsZXIubWF4SW5zdHJ1Y3Rpb25TaXplICsgMiwgY29uc3RTcGFjZSArIDgpOwotI2VuZGlmCi0K
LSNpZiBkZWZpbmVkKEFTU0VNQkxFUl9IQVNfQ09OU1RBTlRfUE9PTCkgJiYgQVNTRU1CTEVSX0hB
U19DT05TVEFOVF9QT09MCi0jaWZuZGVmIE5ERUJVRwotICAgIG1fdW5pbnRlcnJ1cHRlZEluc3Ry
dWN0aW9uU2VxdWVuY2VCZWdpbiA9IGxhYmVsKCk7Ci0gICAgbV91bmludGVycnVwdGVkQ29uc3Rh
bnRTZXF1ZW5jZUJlZ2luID0gc2l6ZU9mQ29uc3RhbnRQb29sKCk7Ci0jZW5kaWYKLSNlbmRpZgot
fQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbmRVbmludGVycnVwdGVkU2VxdWVuY2UoaW50
IGluc25TcGFjZSwgaW50IGNvbnN0U3BhY2UsIGludCBkc3QpCi17Ci0gICAgVU5VU0VEX1BBUkFN
KGRzdCk7Ci0jaWYgZGVmaW5lZChBU1NFTUJMRVJfSEFTX0NPTlNUQU5UX1BPT0wpICYmIEFTU0VN
QkxFUl9IQVNfQ09OU1RBTlRfUE9PTAotICAgIC8qIFRoZXJlIGFyZSBzZXZlcmFsIGNhc2VzIHdo
ZW4gdGhlIHVuaW50ZXJydXB0ZWQgc2VxdWVuY2UgaXMgbGFyZ2VyIHRoYW4KLSAgICAgKiBtYXhp
bXVtIHJlcXVpcmVkIG9mZnNldCBmb3IgcGF0aGluZyB0aGUgc2FtZSBzZXF1ZW5jZS4gRWcuOiBp
ZiBpbiBhCi0gICAgICogdW5pbnRlcnJ1cHRlZCBzZXF1ZW5jZSB0aGUgbGFzdCBtYWNyb2Fzc2Vt
YmxlcidzIGluc3RydWN0aW9uIGlzIGEgc3R1YgotICAgICAqIGNhbGwsIGl0IGVtaXRzIHN0b3Jl
IGluc3RydWN0aW9uKHMpIHdoaWNoIHNob3VsZCBub3QgYmUgaW5jbHVkZWQgaW4gdGhlCi0gICAg
ICogY2FsY3VsYXRpb24gb2YgbGVuZ3RoIG9mIHVuaW50ZXJydXB0ZWQgc2VxdWVuY2UuIFNvLCB0
aGUgaW5zblNwYWNlIGFuZAotICAgICAqIGNvbnN0U3BhY2Ugc2hvdWxkIGJlIHVwcGVyIGxpbWl0
IGluc3RlYWQgb2YgaGFyZCBsaW1pdC4KLSAgICAgKi8KLSNpZiBDUFUoU0g0KQotICAgIGlmICgo
ZHN0ID4gMTUpIHx8IChkc3QgPCAtMTYpKSB7Ci0gICAgICAgIGluc25TcGFjZSArPSA4OwotICAg
ICAgICBjb25zdFNwYWNlICs9IDI7Ci0gICAgfQotCi0gICAgaWYgKCgoZHN0ID49IC0xNikgJiYg
KGRzdCA8IDApKSB8fCAoKGRzdCA+IDcpICYmIChkc3QgPD0gMTUpKSkKLSAgICAgICAgaW5zblNw
YWNlICs9IDg7Ci0jZW5kaWYKLSAgICBBU1NFUlQoZGlmZmVyZW5jZUJldHdlZW4obV91bmludGVy
cnVwdGVkSW5zdHJ1Y3Rpb25TZXF1ZW5jZUJlZ2luLCBsYWJlbCgpKSA8PSBpbnNuU3BhY2UpOwot
ICAgIEFTU0VSVChzaXplT2ZDb25zdGFudFBvb2woKSAtIG1fdW5pbnRlcnJ1cHRlZENvbnN0YW50
U2VxdWVuY2VCZWdpbiA8PSBjb25zdFNwYWNlKTsKLSNlbmRpZgotfQotCi0jZW5kaWYKLQotI2lm
IENQVShBUk0pCi0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnByZXNlcnZlUmV0dXJuQWRkcmVz
c0FmdGVyQ2FsbChSZWdpc3RlcklEIHJlZykKLXsKLSAgICBtb3ZlKGxpbmtSZWdpc3RlciwgcmVn
KTsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6cmVzdG9yZVJldHVybkFkZHJlc3NCZWZv
cmVSZXR1cm4oUmVnaXN0ZXJJRCByZWcpCi17Ci0gICAgbW92ZShyZWcsIGxpbmtSZWdpc3Rlcik7
Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3Jl
UmV0dXJuKEFkZHJlc3MgYWRkcmVzcykKLXsKLSAgICBsb2FkUHRyKGFkZHJlc3MsIGxpbmtSZWdp
c3Rlcik7Ci19Ci0jZWxpZiBDUFUoU0g0KQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpwcmVz
ZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwoUmVnaXN0ZXJJRCByZWcpCi17Ci0gICAgbV9hc3Nl
bWJsZXIuc3RzcHIocmVnKTsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6cmVzdG9yZVJl
dHVybkFkZHJlc3NCZWZvcmVSZXR1cm4oUmVnaXN0ZXJJRCByZWcpCi17Ci0gICAgbV9hc3NlbWJs
ZXIubGRzcHIocmVnKTsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6cmVzdG9yZVJldHVy
bkFkZHJlc3NCZWZvcmVSZXR1cm4oQWRkcmVzcyBhZGRyZXNzKQotewotICAgIGxvYWRQdHJMaW5r
UmVnKGFkZHJlc3MpOwotfQotCi0jZWxpZiBDUFUoTUlQUykKLQotQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6cHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKFJlZ2lzdGVySUQgcmVnKQotewot
ICAgIG1vdmUocmV0dXJuQWRkcmVzc1JlZ2lzdGVyLCByZWcpOwotfQotCi1BTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjpyZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihSZWdpc3RlcklEIHJl
ZykKLXsKLSAgICBtb3ZlKHJlZywgcmV0dXJuQWRkcmVzc1JlZ2lzdGVyKTsKLX0KLQotQUxXQVlT
X0lOTElORSB2b2lkIEpJVDo6cmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4oQWRkcmVz
cyBhZGRyZXNzKQotewotICAgIGxvYWRQdHIoYWRkcmVzcywgcmV0dXJuQWRkcmVzc1JlZ2lzdGVy
KTsKLX0KLQotI2Vsc2UgLy8gQ1BVKFg4NikgfHwgQ1BVKFg4Nl82NCkKLQotQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6cHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKFJlZ2lzdGVySUQgcmVn
KQotewotICAgIHBvcChyZWcpOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpyZXN0b3Jl
UmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihSZWdpc3RlcklEIHJlZykKLXsKLSAgICBwdXNoKHJl
Zyk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVm
b3JlUmV0dXJuKEFkZHJlc3MgYWRkcmVzcykKLXsKLSAgICBwdXNoKGFkZHJlc3MpOwotfQotCi0j
ZW5kaWYKLQotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6cmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNl
KCkKLXsKLSAgICBtb3ZlKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBmaXJzdEFyZ3VtZW50UmVnaXN0
ZXIpOwotICAgIHBva2UoY2FsbEZyYW1lUmVnaXN0ZXIsIE9CSkVDVF9PRkZTRVRPRihzdHJ1Y3Qg
SklUU3RhY2tGcmFtZSwgY2FsbEZyYW1lKSAvIHNpemVvZih2b2lkKikpOwotfQotCi1BTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjp1cGRhdGVUb3BDYWxsRnJhbWUoKQotewotICAgIEFTU0VSVChzdGF0
aWNfY2FzdDxpbnQ+KG1fYnl0ZWNvZGVPZmZzZXQpID49IDApOwotICAgIGlmIChtX2J5dGVjb2Rl
T2Zmc2V0KSB7Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgc3RvcmVQdHIoVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSArIG1fYnl0ZWNvZGVP
ZmZzZXQgKyAxKSwgaW50VGFnRm9yKEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKTsKLSNlbHNlCi0g
ICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKG1fYnl0ZWNvZGVPZmZzZXQgKyAxKSwgaW50VGFn
Rm9yKEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKTsKLSNlbmRpZgotICAgIH0KLSAgICBzdG9yZVB0
cihjYWxsRnJhbWVSZWdpc3RlciwgJm1fZ2xvYmFsRGF0YS0+dG9wQ2FsbEZyYW1lKTsKLX0KLQot
QUxXQVlTX0lOTElORSB2b2lkIEpJVDo6cmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNlRm9yVHJhbXBv
bGluZSgpCi17Ci0jaWYgQ1BVKFg4NikKLSAgICAvLyBXaXRoaW4gYSB0cmFtcG9saW5lIHRoZSBy
ZXR1cm4gYWRkcmVzcyB3aWxsIGJlIG9uIHRoZSBzdGFjayBhdCB0aGlzIHBvaW50LgotICAgIGFk
ZFB0cihUcnVzdGVkSW1tMzIoc2l6ZW9mKHZvaWQqKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBm
aXJzdEFyZ3VtZW50UmVnaXN0ZXIpOwotI2VsaWYgQ1BVKEFSTSkKLSAgICBtb3ZlKHN0YWNrUG9p
bnRlclJlZ2lzdGVyLCBmaXJzdEFyZ3VtZW50UmVnaXN0ZXIpOwotI2VsaWYgQ1BVKFNINCkKLSAg
ICBtb3ZlKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBmaXJzdEFyZ3VtZW50UmVnaXN0ZXIpOwotI2Vu
ZGlmCi0gICAgLy8gSW4gdGhlIHRyYW1wb2xpbmUgb24geDg2LTY0LCB0aGUgZmlyc3QgYXJndW1l
bnQgcmVnaXN0ZXIgaXMgbm90IG92ZXJ3cml0dGVuLgotfQotCi1BTFdBWVNfSU5MSU5FIEpJVDo6
SnVtcCBKSVQ6OmNoZWNrU3RydWN0dXJlKFJlZ2lzdGVySUQgcmVnLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkKLXsKLSAgICByZXR1cm4gYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZywgSlND
ZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSk7Ci19Ci0K
LUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIGludCB2UmVnKQotewotICAgIGlmICghbV9j
b2RlQmxvY2stPmlzS25vd25Ob3RJbW1lZGlhdGUodlJlZykpCi0gICAgICAgIGxpbmtTbG93Q2Fz
ZShpdGVyKTsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xvd0Nhc2UoSnVtcCBq
dW1wKQotewotICAgIEFTU0VSVChtX2J5dGVjb2RlT2Zmc2V0ICE9ICh1bnNpZ25lZCktMSk7IC8v
IFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBn
ZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVPZmZzZXQgaXMgc2V0LgotCi0gICAgbV9zbG93
Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoanVtcCwgbV9ieXRlY29kZU9mZnNldCkpOwotfQot
Ci1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZShKdW1wTGlzdCBqdW1wTGlzdCkK
LXsKLSAgICBBU1NFUlQobV9ieXRlY29kZU9mZnNldCAhPSAodW5zaWduZWQpLTEpOyAvLyBUaGlz
IG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJh
dGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlT2Zmc2V0IGlzIHNldC4KLQotICAgIGNvbnN0IEp1bXBM
aXN0OjpKdW1wVmVjdG9yJiBqdW1wVmVjdG9yID0ganVtcExpc3QuanVtcHMoKTsKLSAgICBzaXpl
X3Qgc2l6ZSA9IGp1bXBWZWN0b3Iuc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
c2l6ZTsgKytpKQotICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShqdW1w
VmVjdG9yW2ldLCBtX2J5dGVjb2RlT2Zmc2V0KSk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6OmFkZFNsb3dDYXNlKCkKLXsKLSAgICBBU1NFUlQobV9ieXRlY29kZU9mZnNldCAhPSAodW5z
aWduZWQpLTEpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhv
dC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlT2Zmc2V0IGlzIHNldC4K
LSAgICAKLSAgICBKdW1wIGVtcHR5SnVtcDsgLy8gRG9pbmcgaXQgdGhpcyB3YXkgdG8gbWFrZSBX
aW5kb3dzIGhhcHB5LgotICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KGVtcHR5
SnVtcCwgbV9ieXRlY29kZU9mZnNldCkpOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjph
ZGRKdW1wKEp1bXAganVtcCwgaW50IHJlbGF0aXZlT2Zmc2V0KQotewotICAgIEFTU0VSVChtX2J5
dGVjb2RlT2Zmc2V0ICE9ICh1bnNpZ25lZCktMSk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5
IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0
ZWNvZGVPZmZzZXQgaXMgc2V0LgotCi0gICAgbV9qbXBUYWJsZS5hcHBlbmQoSnVtcFRhYmxlKGp1
bXAsIG1fYnl0ZWNvZGVPZmZzZXQgKyByZWxhdGl2ZU9mZnNldCkpOwotfQotCi1BTFdBWVNfSU5M
SU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dUb0hvdChKdW1wIGp1bXAsIGludCByZWxhdGl2ZU9m
ZnNldCkKLXsKLSAgICBBU1NFUlQobV9ieXRlY29kZU9mZnNldCAhPSAodW5zaWduZWQpLTEpOyAv
LyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGgg
Z2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlT2Zmc2V0IGlzIHNldC4KLQotICAgIGp1bXAu
bGlua1RvKG1fbGFiZWxzW21fYnl0ZWNvZGVPZmZzZXQgKyByZWxhdGl2ZU9mZnNldF0sIHRoaXMp
OwotfQotCi1BTFdBWVNfSU5MSU5FIEpJVDo6SnVtcCBKSVQ6OmVtaXRKdW1wSWZOb3RPYmplY3Qo
UmVnaXN0ZXJJRCBzdHJ1Y3R1cmVSZWcpCi17Ci0gICAgcmV0dXJuIGJyYW5jaDgoQmVsb3csIEFk
ZHJlc3Moc3RydWN0dXJlUmVnLCBTdHJ1Y3R1cmU6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1
c3RlZEltbTMyKE9iamVjdFR5cGUpKTsKLX0KLQotQUxXQVlTX0lOTElORSBKSVQ6Okp1bXAgSklU
OjplbWl0SnVtcElmTm90VHlwZShSZWdpc3RlcklEIGJhc2VSZWcsIFJlZ2lzdGVySUQgc2NyYXRj
aFJlZywgSlNUeXBlIHR5cGUpCi17Ci0gICAgbG9hZFB0cihBZGRyZXNzKGJhc2VSZWcsIEpTQ2Vs
bDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzY3JhdGNoUmVnKTsKLSAgICByZXR1cm4gYnJhbmNoOChO
b3RFcXVhbCwgQWRkcmVzcyhzY3JhdGNoUmVnLCBTdHJ1Y3R1cmU6OnR5cGVJbmZvVHlwZU9mZnNl
dCgpKSwgVHJ1c3RlZEltbTMyKHR5cGUpKTsKLX0KLQotI2lmIEVOQUJMRShTQU1QTElOR19GTEFH
UykKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnNldFNhbXBsaW5nRmxhZyhpbnQzMl90IGZsYWcp
Ci17Ci0gICAgQVNTRVJUKGZsYWcgPj0gMSk7Ci0gICAgQVNTRVJUKGZsYWcgPD0gMzIpOwotICAg
IG9yMzIoVHJ1c3RlZEltbTMyKDF1IDw8IChmbGFnIC0gMSkpLCBBYnNvbHV0ZUFkZHJlc3MoU2Ft
cGxpbmdGbGFnczo6YWRkcmVzc09mRmxhZ3MoKSkpOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQg
SklUOjpjbGVhclNhbXBsaW5nRmxhZyhpbnQzMl90IGZsYWcpCi17Ci0gICAgQVNTRVJUKGZsYWcg
Pj0gMSk7Ci0gICAgQVNTRVJUKGZsYWcgPD0gMzIpOwotICAgIGFuZDMyKFRydXN0ZWRJbW0zMih+
KDF1IDw8IChmbGFnIC0gMSkpKSwgQWJzb2x1dGVBZGRyZXNzKFNhbXBsaW5nRmxhZ3M6OmFkZHJl
c3NPZkZsYWdzKCkpKTsKLX0KLSNlbmRpZgotCi0jaWYgRU5BQkxFKFNBTVBMSU5HX0NPVU5URVJT
KQotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdENvdW50KEFic3RyYWN0U2FtcGxpbmdDb3Vu
dGVyJiBjb3VudGVyLCBpbnQzMl90IGNvdW50KQotewotICAgIGFkZDY0KFRydXN0ZWRJbW0zMihj
b3VudCksIEFic29sdXRlQWRkcmVzcyhjb3VudGVyLmFkZHJlc3NPZkNvdW50ZXIoKSkpOwotfQot
I2VuZGlmCi0KLSNpZiBFTkFCTEUoT1BDT0RFX1NBTVBMSU5HKQotI2lmIENQVShYODZfNjQpCi1B
TFdBWVNfSU5MSU5FIHZvaWQgSklUOjpzYW1wbGVJbnN0cnVjdGlvbihJbnN0cnVjdGlvbiogaW5z
dHJ1Y3Rpb24sIGJvb2wgaW5Ib3N0RnVuY3Rpb24pCi17Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRy
KG1faW50ZXJwcmV0ZXItPnNhbXBsZXIoKS0+c2FtcGxlU2xvdCgpKSwgWDg2UmVnaXN0ZXJzOjpl
Y3gpOwotICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIobV9pbnRlcnByZXRlci0+c2FtcGxlcigp
LT5lbmNvZGVTYW1wbGUoaW5zdHJ1Y3Rpb24sIGluSG9zdEZ1bmN0aW9uKSksIFg4NlJlZ2lzdGVy
czo6ZWN4KTsKLX0KLSNlbHNlCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpzYW1wbGVJbnN0cnVj
dGlvbihJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIGJvb2wgaW5Ib3N0RnVuY3Rpb24pCi17Ci0g
ICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihtX2ludGVycHJldGVyLT5zYW1wbGVyKCktPmVuY29k
ZVNhbXBsZShpbnN0cnVjdGlvbiwgaW5Ib3N0RnVuY3Rpb24pKSwgbV9pbnRlcnByZXRlci0+c2Ft
cGxlcigpLT5zYW1wbGVTbG90KCkpOwotfQotI2VuZGlmCi0jZW5kaWYKLQotI2lmIEVOQUJMRShD
T0RFQkxPQ0tfU0FNUExJTkcpCi0jaWYgQ1BVKFg4Nl82NCkKLUFMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6OnNhbXBsZUNvZGVCbG9jayhDb2RlQmxvY2sqIGNvZGVCbG9jaykKLXsKLSAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIobV9pbnRlcnByZXRlci0+c2FtcGxlcigpLT5jb2RlQmxvY2tTbG90KCkpLCBY
ODZSZWdpc3RlcnM6OmVjeCk7Ci0gICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihjb2RlQmxvY2sp
LCBYODZSZWdpc3RlcnM6OmVjeCk7Ci19Ci0jZWxzZQotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6
c2FtcGxlQ29kZUJsb2NrKENvZGVCbG9jayogY29kZUJsb2NrKQotewotICAgIHN0b3JlUHRyKFRy
dXN0ZWRJbW1QdHIoY29kZUJsb2NrKSwgbV9pbnRlcnByZXRlci0+c2FtcGxlcigpLT5jb2RlQmxv
Y2tTbG90KCkpOwotfQotI2VuZGlmCi0jZW5kaWYKLQotQUxXQVlTX0lOTElORSBib29sIEpJVDo6
aXNPcGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVDaGFyKHVuc2lnbmVkIHNyYykKLXsKLSAgICByZXR1
cm4gbV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHNyYykgJiYgZ2V0Q29uc3Rh
bnRPcGVyYW5kKHNyYykuaXNTdHJpbmcoKSAmJiBhc1N0cmluZyhnZXRDb25zdGFudE9wZXJhbmQo
c3JjKS5hc0NlbGwoKSktPmxlbmd0aCgpID09IDE7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBD
bGFzc1R5cGUsIE1hcmtlZEJsb2NrOjpEZXN0cnVjdG9yVHlwZSBkZXN0cnVjdG9yVHlwZSwgdHlw
ZW5hbWUgU3RydWN0dXJlVHlwZT4gaW5saW5lIHZvaWQgSklUOjplbWl0QWxsb2NhdGVCYXNpY0pT
T2JqZWN0KFN0cnVjdHVyZVR5cGUgc3RydWN0dXJlLCBSZWdpc3RlcklEIHJlc3VsdCwgUmVnaXN0
ZXJJRCBzdG9yYWdlUHRyKQotewotICAgIHNpemVfdCBzaXplID0gQ2xhc3NUeXBlOjphbGxvY2F0
aW9uU2l6ZShJTkxJTkVfU1RPUkFHRV9DQVBBQ0lUWSk7Ci0gICAgTWFya2VkQWxsb2NhdG9yKiBh
bGxvY2F0b3IgPSAwOwotICAgIGlmIChkZXN0cnVjdG9yVHlwZSA9PSBNYXJrZWRCbG9jazo6Tm9y
bWFsKQotICAgICAgICBhbGxvY2F0b3IgPSAmbV9nbG9iYWxEYXRhLT5oZWFwLmFsbG9jYXRvckZv
ck9iamVjdFdpdGhOb3JtYWxEZXN0cnVjdG9yKHNpemUpOwotICAgIGVsc2UgaWYgKGRlc3RydWN0
b3JUeXBlID09IE1hcmtlZEJsb2NrOjpJbW1vcnRhbFN0cnVjdHVyZSkKLSAgICAgICAgYWxsb2Nh
dG9yID0gJm1fZ2xvYmFsRGF0YS0+aGVhcC5hbGxvY2F0b3JGb3JPYmplY3RXaXRoSW1tb3J0YWxT
dHJ1Y3R1cmVEZXN0cnVjdG9yKHNpemUpOwotICAgIGVsc2UKLSAgICAgICAgYWxsb2NhdG9yID0g
Jm1fZ2xvYmFsRGF0YS0+aGVhcC5hbGxvY2F0b3JGb3JPYmplY3RXaXRob3V0RGVzdHJ1Y3Rvcihz
aXplKTsKLSAgICBsb2FkUHRyKCZhbGxvY2F0b3ItPm1fZnJlZUxpc3QuaGVhZCwgcmVzdWx0KTsK
LSAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKFplcm8sIHJlc3VsdCkpOwotCi0gICAgLy8g
cmVtb3ZlIHRoZSBvYmplY3QgZnJvbSB0aGUgZnJlZSBsaXN0Ci0gICAgbG9hZFB0cihBZGRyZXNz
KHJlc3VsdCksIHN0b3JhZ2VQdHIpOwotICAgIHN0b3JlUHRyKHN0b3JhZ2VQdHIsICZhbGxvY2F0
b3ItPm1fZnJlZUxpc3QuaGVhZCk7Ci0KLSAgICAvLyBpbml0aWFsaXplIHRoZSBvYmplY3QncyBz
dHJ1Y3R1cmUKLSAgICBzdG9yZVB0cihzdHJ1Y3R1cmUsIEFkZHJlc3MocmVzdWx0LCBKU0NlbGw6
OnN0cnVjdHVyZU9mZnNldCgpKSk7Ci0KLSAgICAvLyBpbml0aWFsaXplIHRoZSBvYmplY3QncyBw
cm9wZXJ0eSBzdG9yYWdlIHBvaW50ZXIKLSAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKDApLCBB
ZGRyZXNzKHJlc3VsdCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSk7Ci19Ci0KLXRlbXBs
YXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBbGxvY2F0ZUpTRmluYWxPYmpl
Y3QoVCBzdHJ1Y3R1cmUsIFJlZ2lzdGVySUQgcmVzdWx0LCBSZWdpc3RlcklEIHNjcmF0Y2gpCi17
Ci0gICAgZW1pdEFsbG9jYXRlQmFzaWNKU09iamVjdDxKU0ZpbmFsT2JqZWN0LCBNYXJrZWRCbG9j
azo6Tm9uZSwgVD4oc3RydWN0dXJlLCByZXN1bHQsIHNjcmF0Y2gpOwotfQotCi0jaWYgRU5BQkxF
KFZBTFVFX1BST0ZJTEVSKQotaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRl
KFZhbHVlUHJvZmlsZSogdmFsdWVQcm9maWxlKQotewotICAgIEFTU0VSVChzaG91bGRFbWl0UHJv
ZmlsaW5nKCkpOwotICAgIEFTU0VSVCh2YWx1ZVByb2ZpbGUpOwotCi0gICAgY29uc3QgUmVnaXN0
ZXJJRCB2YWx1ZSA9IHJlZ1QwOwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgY29uc3QgUmVn
aXN0ZXJJRCB2YWx1ZVRhZyA9IHJlZ1QxOwotI2VuZGlmCi0gICAgY29uc3QgUmVnaXN0ZXJJRCBz
Y3JhdGNoID0gcmVnVDM7Ci0gICAgCi0gICAgaWYgKFZhbHVlUHJvZmlsZTo6bnVtYmVyT2ZCdWNr
ZXRzID09IDEpIHsKLSAgICAgICAgLy8gV2UncmUgaW4gYSBzaW1wbGUgY29uZmlndXJhdGlvbjog
b25seSBvbmUgYnVja2V0LCBzbyB3ZSBjYW4ganVzdCBkbyBhIGRpcmVjdAotICAgICAgICAvLyBz
dG9yZS4KLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBzdG9yZTY0KHZhbHVlLCB2YWx1ZVBy
b2ZpbGUtPm1fYnVja2V0cyk7Ci0jZWxzZQotICAgICAgICBFbmNvZGVkVmFsdWVEZXNjcmlwdG9y
KiBkZXNjcmlwdG9yID0gYml0d2lzZV9jYXN0PEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqPih2YWx1
ZVByb2ZpbGUtPm1fYnVja2V0cyk7Ci0gICAgICAgIHN0b3JlMzIodmFsdWUsICZkZXNjcmlwdG9y
LT5hc0JpdHMucGF5bG9hZCk7Ci0gICAgICAgIHN0b3JlMzIodmFsdWVUYWcsICZkZXNjcmlwdG9y
LT5hc0JpdHMudGFnKTsKLSNlbmRpZgotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAg
IGlmIChtX3JhbmRvbUdlbmVyYXRvci5nZXRVaW50MzIoKSAmIDEpCi0gICAgICAgIGFkZDMyKFRy
dXN0ZWRJbW0zMigxKSwgYnVja2V0Q291bnRlclJlZ2lzdGVyKTsKLSAgICBlbHNlCi0gICAgICAg
IGFkZDMyKFRydXN0ZWRJbW0zMigzKSwgYnVja2V0Q291bnRlclJlZ2lzdGVyKTsKLSAgICBhbmQz
MihUcnVzdGVkSW1tMzIoVmFsdWVQcm9maWxlOjpidWNrZXRJbmRleE1hc2spLCBidWNrZXRDb3Vu
dGVyUmVnaXN0ZXIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cih2YWx1ZVByb2ZpbGUtPm1fYnVj
a2V0cyksIHNjcmF0Y2gpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgc3RvcmU2NCh2YWx1ZSwg
QmFzZUluZGV4KHNjcmF0Y2gsIGJ1Y2tldENvdW50ZXJSZWdpc3RlciwgVGltZXNFaWdodCkpOwot
I2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICBzdG9yZTMyKHZhbHVlLCBCYXNlSW5kZXgoc2Ny
YXRjaCwgYnVja2V0Q291bnRlclJlZ2lzdGVyLCBUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0Yo
SlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpKTsKLSAgICBzdG9yZTMyKHZhbHVlVGFnLCBCYXNl
SW5kZXgoc2NyYXRjaCwgYnVja2V0Q291bnRlclJlZ2lzdGVyLCBUaW1lc0VpZ2h0LCBPQkpFQ1Rf
T0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSkpOwotI2VuZGlmCi19Ci0KLWlubGluZSB2
b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSh1bnNpZ25lZCBieXRlY29kZU9mZnNldCkK
LXsKLSAgICBpZiAoIXNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobV9jb2RlQmxvY2stPnZhbHVlUHJvZmlsZUZvckJ5dGVj
b2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KSk7Ci19Ci0KLWlubGluZSB2b2lkIEpJVDo6ZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZSgpCi17Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtX2J5dGVj
b2RlT2Zmc2V0KTsKLX0KLSNlbmRpZiAvLyBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCi0KLWlubGlu
ZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZShSZWdpc3RlcklEIHN0cnVjdHVyZUFu
ZEluZGV4aW5nVHlwZSwgUmVnaXN0ZXJJRCBzY3JhdGNoLCBBcnJheVByb2ZpbGUqIGFycmF5UHJv
ZmlsZSkKLXsKLSAgICBVTlVTRURfUEFSQU0oc2NyYXRjaCk7IC8vIFdlIGhhZCBmb3VuZCB0aGlz
IHNjcmF0Y2ggcmVnaXN0ZXIgdXNlZnVsIGhlcmUgYmVmb3JlLCBzbyBJIHdpbGwga2VlcCBpdCBm
b3Igbm93LgotICAgIAotICAgIFJlZ2lzdGVySUQgc3RydWN0dXJlID0gc3RydWN0dXJlQW5kSW5k
ZXhpbmdUeXBlOwotICAgIFJlZ2lzdGVySUQgaW5kZXhpbmdUeXBlID0gc3RydWN0dXJlQW5kSW5k
ZXhpbmdUeXBlOwotICAgIAotICAgIGlmIChjYW5CZU9wdGltaXplZCgpKQotICAgICAgICBzdG9y
ZVB0cihzdHJ1Y3R1cmUsIGFycmF5UHJvZmlsZS0+YWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1cmUo
KSk7Ci0KLSAgICBsb2FkOChBZGRyZXNzKHN0cnVjdHVyZSwgU3RydWN0dXJlOjppbmRleGluZ1R5
cGVPZmZzZXQoKSksIGluZGV4aW5nVHlwZSk7Ci19Ci0KLWlubGluZSB2b2lkIEpJVDo6ZW1pdEFy
cmF5UHJvZmlsaW5nU2l0ZUZvckJ5dGVjb2RlSW5kZXgoUmVnaXN0ZXJJRCBzdHJ1Y3R1cmVBbmRJ
bmRleGluZ1R5cGUsIFJlZ2lzdGVySUQgc2NyYXRjaCwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkK
LXsKLSNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCi0gICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0
ZShzdHJ1Y3R1cmVBbmRJbmRleGluZ1R5cGUsIHNjcmF0Y2gsIG1fY29kZUJsb2NrLT5nZXRPckFk
ZEFycmF5UHJvZmlsZShieXRlY29kZUluZGV4KSk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShi
eXRlY29kZUluZGV4KTsKLSAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlKHN0cnVjdHVyZUFuZElu
ZGV4aW5nVHlwZSwgc2NyYXRjaCwgMCk7Ci0jZW5kaWYKLX0KLQotaW5saW5lIHZvaWQgSklUOjpl
bWl0QXJyYXlQcm9maWxlU3RvcmVUb0hvbGVTcGVjaWFsQ2FzZShBcnJheVByb2ZpbGUqIGFycmF5
UHJvZmlsZSkKLXsKLSNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpICAgIAotICAgIHN0b3JlOChU
cnVzdGVkSW1tMzIoMSksIGFycmF5UHJvZmlsZS0+YWRkcmVzc09mTWF5U3RvcmVUb0hvbGUoKSk7
Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShhcnJheVByb2ZpbGUpOwotI2VuZGlmCi19Ci0KLXN0
YXRpYyBpbmxpbmUgYm9vbCBhcnJheVByb2ZpbGVTYXcoQXJyYXlQcm9maWxlKiBwcm9maWxlLCBJ
bmRleGluZ1R5cGUgY2FwYWJpbGl0eSkKLXsKLSNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCi0g
ICAgcmV0dXJuICEhKHByb2ZpbGUtPm9ic2VydmVkQXJyYXlNb2RlcygpICYgKGFzQXJyYXlNb2Rl
cyhOb25BcnJheSB8IGNhcGFiaWxpdHkpIHwgYXNBcnJheU1vZGVzKEFycmF5Q2xhc3MgfCBjYXBh
YmlsaXR5KSkpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0ocHJvZmlsZSk7Ci0gICAgVU5VU0VE
X1BBUkFNKGNhcGFiaWxpdHkpOwotICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotfQotCi1pbmxp
bmUgSklUQXJyYXlNb2RlIEpJVDo6Y2hvb3NlQXJyYXlNb2RlKEFycmF5UHJvZmlsZSogcHJvZmls
ZSkKLXsKLSAgICBpZiAoYXJyYXlQcm9maWxlU2F3KHByb2ZpbGUsIEFycmF5U3RvcmFnZVNoYXBl
KSkKLSAgICAgICAgcmV0dXJuIEpJVEFycmF5U3RvcmFnZTsKLSAgICByZXR1cm4gSklUQ29udGln
dW91czsKLX0KLQotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0KLWlubGluZSB2b2lkIEpJVDo6ZW1p
dExvYWRUYWcoaW50IGluZGV4LCBSZWdpc3RlcklEIHRhZykKLXsKLSAgICBSZWdpc3RlcklEIG1h
cHBlZFRhZzsKLSAgICBpZiAoZ2V0TWFwcGVkVGFnKGluZGV4LCBtYXBwZWRUYWcpKSB7Ci0gICAg
ICAgIG1vdmUobWFwcGVkVGFnLCB0YWcpOwotICAgICAgICB1bm1hcCh0YWcpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJ
bmRleChpbmRleCkpIHsKLSAgICAgICAgbW92ZShJbW0zMihnZXRDb25zdGFudE9wZXJhbmQoaW5k
ZXgpLnRhZygpKSwgdGFnKTsKLSAgICAgICAgdW5tYXAodGFnKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGxvYWQzMih0YWdGb3IoaW5kZXgpLCB0YWcpOwotICAgIHVubWFwKHRhZyk7
Ci19Ci0KLWlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWRQYXlsb2FkKGludCBpbmRleCwgUmVnaXN0
ZXJJRCBwYXlsb2FkKQotewotICAgIFJlZ2lzdGVySUQgbWFwcGVkUGF5bG9hZDsKLSAgICBpZiAo
Z2V0TWFwcGVkUGF5bG9hZChpbmRleCwgbWFwcGVkUGF5bG9hZCkpIHsKLSAgICAgICAgbW92ZSht
YXBwZWRQYXlsb2FkLCBwYXlsb2FkKTsKLSAgICAgICAgdW5tYXAocGF5bG9hZCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3Rl
ckluZGV4KGluZGV4KSkgewotICAgICAgICBtb3ZlKEltbTMyKGdldENvbnN0YW50T3BlcmFuZChp
bmRleCkucGF5bG9hZCgpKSwgcGF5bG9hZCk7Ci0gICAgICAgIHVubWFwKHBheWxvYWQpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbG9hZDMyKHBheWxvYWRGb3IoaW5kZXgpLCBwYXls
b2FkKTsKLSAgICB1bm1hcChwYXlsb2FkKTsKLX0KLQotaW5saW5lIHZvaWQgSklUOjplbWl0TG9h
ZChjb25zdCBKU1ZhbHVlJiB2LCBSZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJRCBwYXlsb2FkKQot
ewotICAgIG1vdmUoSW1tMzIodi5wYXlsb2FkKCkpLCBwYXlsb2FkKTsKLSAgICBtb3ZlKEltbTMy
KHYudGFnKCkpLCB0YWcpOwotfQotCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkKGludCBpbmRl
eCwgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgUmVnaXN0ZXJJRCBiYXNlKQot
ewotICAgIEFTU0VSVCh0YWcgIT0gcGF5bG9hZCk7Ci0KLSAgICBpZiAoYmFzZSA9PSBjYWxsRnJh
bWVSZWdpc3RlcikgewotICAgICAgICBBU1NFUlQocGF5bG9hZCAhPSBiYXNlKTsKLSAgICAgICAg
ZW1pdExvYWRQYXlsb2FkKGluZGV4LCBwYXlsb2FkKTsKLSAgICAgICAgZW1pdExvYWRUYWcoaW5k
ZXgsIHRhZyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAocGF5bG9hZCA9PSBi
YXNlKSB7IC8vIGF2b2lkIHN0b21waW5nIGJhc2UKLSAgICAgICAgbG9hZDMyKHRhZ0ZvcihpbmRl
eCwgYmFzZSksIHRhZyk7Ci0gICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKGluZGV4LCBiYXNlKSwg
cGF5bG9hZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBsb2FkMzIocGF5bG9hZEZv
cihpbmRleCwgYmFzZSksIHBheWxvYWQpOwotICAgIGxvYWQzMih0YWdGb3IoaW5kZXgsIGJhc2Up
LCB0YWcpOwotfQotCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkMihpbnQgaW5kZXgxLCBSZWdp
c3RlcklEIHRhZzEsIFJlZ2lzdGVySUQgcGF5bG9hZDEsIGludCBpbmRleDIsIFJlZ2lzdGVySUQg
dGFnMiwgUmVnaXN0ZXJJRCBwYXlsb2FkMikKLXsKLSAgICBpZiAoaXNNYXBwZWQoaW5kZXgxKSkg
ewotICAgICAgICBlbWl0TG9hZChpbmRleDEsIHRhZzEsIHBheWxvYWQxKTsKLSAgICAgICAgZW1p
dExvYWQoaW5kZXgyLCB0YWcyLCBwYXlsb2FkMik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgZW1pdExvYWQoaW5kZXgyLCB0YWcyLCBwYXlsb2FkMik7Ci0gICAgZW1pdExvYWQoaW5kZXgx
LCB0YWcxLCBwYXlsb2FkMSk7Ci19Ci0KLWlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWREb3VibGUo
aW50IGluZGV4LCBGUFJlZ2lzdGVySUQgdmFsdWUpCi17Ci0gICAgaWYgKG1fY29kZUJsb2NrLT5p
c0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbmRleCkpIHsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVu
a25vd24+JiBpbkNvbnN0YW50UG9vbCA9IG1fY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKGlu
ZGV4KTsKLSAgICAgICAgbG9hZERvdWJsZSgmaW5Db25zdGFudFBvb2wsIHZhbHVlKTsKLSAgICB9
IGVsc2UKLSAgICAgICAgbG9hZERvdWJsZShhZGRyZXNzRm9yKGluZGV4KSwgdmFsdWUpOwotfQot
Ci1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkSW50MzJUb0RvdWJsZShpbnQgaW5kZXgsIEZQUmVn
aXN0ZXJJRCB2YWx1ZSkKLXsKLSAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3Rl
ckluZGV4KGluZGV4KSkgewotICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGluQ29uc3Rh
bnRQb29sID0gbV9jb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIoaW5kZXgpOwotICAgICAgICBj
aGFyKiBieXRlUG9pbnRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KCZpbkNvbnN0YW50UG9v
bCk7Ci0gICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKEFic29sdXRlQWRkcmVzcyhieXRlUG9p
bnRlciArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHZhbHVl
KTsKLSAgICB9IGVsc2UKLSAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUocGF5bG9hZEZvcihp
bmRleCksIHZhbHVlKTsKLX0KLQotaW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmUoaW50IGluZGV4
LCBSZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJRCBwYXlsb2FkLCBSZWdpc3RlcklEIGJhc2UpCi17
Ci0gICAgc3RvcmUzMihwYXlsb2FkLCBwYXlsb2FkRm9yKGluZGV4LCBiYXNlKSk7Ci0gICAgc3Rv
cmUzMih0YWcsIHRhZ0ZvcihpbmRleCwgYmFzZSkpOwotfQotCi1pbmxpbmUgdm9pZCBKSVQ6OmVt
aXRTdG9yZUludDMyKGludCBpbmRleCwgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXNJ
bnQzMikKLXsKLSAgICBzdG9yZTMyKHBheWxvYWQsIHBheWxvYWRGb3IoaW5kZXgsIGNhbGxGcmFt
ZVJlZ2lzdGVyKSk7Ci0gICAgaWYgKCFpbmRleElzSW50MzIpCi0gICAgICAgIHN0b3JlMzIoVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgdGFnRm9yKGluZGV4LCBjYWxsRnJhbWVSZWdp
c3RlcikpOwotfQotCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZUFuZE1hcEludDMyKGludCBp
bmRleCwgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzSW50
MzIsIHNpemVfdCBvcGNvZGVMZW5ndGgpCi17Ci0gICAgZW1pdFN0b3JlSW50MzIoaW5kZXgsIHBh
eWxvYWQsIGluZGV4SXNJbnQzMik7Ci0gICAgbWFwKG1fYnl0ZWNvZGVPZmZzZXQgKyBvcGNvZGVM
ZW5ndGgsIGluZGV4LCB0YWcsIHBheWxvYWQpOwotfQotCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRT
dG9yZUludDMyKGludCBpbmRleCwgVHJ1c3RlZEltbTMyIHBheWxvYWQsIGJvb2wgaW5kZXhJc0lu
dDMyKQotewotICAgIHN0b3JlMzIocGF5bG9hZCwgcGF5bG9hZEZvcihpbmRleCwgY2FsbEZyYW1l
UmVnaXN0ZXIpKTsKLSAgICBpZiAoIWluZGV4SXNJbnQzMikKLSAgICAgICAgc3RvcmUzMihUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCB0YWdGb3IoaW5kZXgsIGNhbGxGcmFtZVJlZ2lz
dGVyKSk7Ci19Ci0KLWlubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlQ2VsbChpbnQgaW5kZXgsIFJl
Z2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzQ2VsbCkKLXsKLSAgICBzdG9yZTMyKHBheWxv
YWQsIHBheWxvYWRGb3IoaW5kZXgsIGNhbGxGcmFtZVJlZ2lzdGVyKSk7Ci0gICAgaWYgKCFpbmRl
eElzQ2VsbCkKLSAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyks
IHRhZ0ZvcihpbmRleCwgY2FsbEZyYW1lUmVnaXN0ZXIpKTsKLX0KLQotaW5saW5lIHZvaWQgSklU
OjplbWl0U3RvcmVCb29sKGludCBpbmRleCwgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4
SXNCb29sKQotewotICAgIHN0b3JlMzIocGF5bG9hZCwgcGF5bG9hZEZvcihpbmRleCwgY2FsbEZy
YW1lUmVnaXN0ZXIpKTsKLSAgICBpZiAoIWluZGV4SXNCb29sKQotICAgICAgICBzdG9yZTMyKFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpCb29sZWFuVGFnKSwgdGFnRm9yKGluZGV4LCBjYWxsRnJhbWVS
ZWdpc3RlcikpOwotfQotCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZURvdWJsZShpbnQgaW5k
ZXgsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKLXsKLSAgICBzdG9yZURvdWJsZSh2YWx1ZSwgYWRkcmVz
c0ZvcihpbmRleCkpOwotfQotCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZShpbnQgaW5kZXgs
IGNvbnN0IEpTVmFsdWUgY29uc3RhbnQsIFJlZ2lzdGVySUQgYmFzZSkKLXsKLSAgICBzdG9yZTMy
KEltbTMyKGNvbnN0YW50LnBheWxvYWQoKSksIHBheWxvYWRGb3IoaW5kZXgsIGJhc2UpKTsKLSAg
ICBzdG9yZTMyKEltbTMyKGNvbnN0YW50LnRhZygpKSwgdGFnRm9yKGluZGV4LCBiYXNlKSk7Ci19
Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRJbml0UmVnaXN0ZXIodW5zaWduZWQgZHN0
KQotewotICAgIGVtaXRTdG9yZShkc3QsIGpzVW5kZWZpbmVkKCkpOwotfQotCi1pbmxpbmUgYm9v
bCBKSVQ6OmlzTGFiZWxlZCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCkKLXsKLSAgICBmb3IgKHNp
emVfdCBudW1iZXJPZkp1bXBUYXJnZXRzID0gbV9jb2RlQmxvY2stPm51bWJlck9mSnVtcFRhcmdl
dHMoKTsgbV9qdW1wVGFyZ2V0SW5kZXggIT0gbnVtYmVyT2ZKdW1wVGFyZ2V0czsgKyttX2p1bXBU
YXJnZXRJbmRleCkgewotICAgICAgICB1bnNpZ25lZCBqdW1wVGFyZ2V0ID0gbV9jb2RlQmxvY2st
Pmp1bXBUYXJnZXQobV9qdW1wVGFyZ2V0SW5kZXgpOwotICAgICAgICBpZiAoanVtcFRhcmdldCA9
PSBieXRlY29kZU9mZnNldCkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBpZiAo
anVtcFRhcmdldCA+IGJ5dGVjb2RlT2Zmc2V0KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWlubGluZSB2b2lkIEpJVDo6bWFwKHVuc2ln
bmVkIGJ5dGVjb2RlT2Zmc2V0LCBpbnQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIFJlZ2lzdGVySUQg
dGFnLCBSZWdpc3RlcklEIHBheWxvYWQpCi17Ci0gICAgaWYgKGlzTGFiZWxlZChieXRlY29kZU9m
ZnNldCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fbWFwcGVkQnl0ZWNvZGVPZmZzZXQgPSBi
eXRlY29kZU9mZnNldDsKLSAgICBtX21hcHBlZFZpcnR1YWxSZWdpc3RlckluZGV4ID0gdmlydHVh
bFJlZ2lzdGVySW5kZXg7Ci0gICAgbV9tYXBwZWRUYWcgPSB0YWc7Ci0gICAgbV9tYXBwZWRQYXls
b2FkID0gcGF5bG9hZDsKLSAgICAKLSAgICBBU1NFUlQoIWNhbkJlT3B0aW1pemVkKCkgfHwgbV9t
YXBwZWRQYXlsb2FkID09IHJlZ1QwKTsKLSAgICBBU1NFUlQoIWNhbkJlT3B0aW1pemVkKCkgfHwg
bV9tYXBwZWRUYWcgPT0gcmVnVDEpOwotfQotCi1pbmxpbmUgdm9pZCBKSVQ6OnVubWFwKFJlZ2lz
dGVySUQgcmVnaXN0ZXJJRCkKLXsKLSAgICBpZiAobV9tYXBwZWRUYWcgPT0gcmVnaXN0ZXJJRCkK
LSAgICAgICAgbV9tYXBwZWRUYWcgPSAoUmVnaXN0ZXJJRCktMTsKLSAgICBlbHNlIGlmIChtX21h
cHBlZFBheWxvYWQgPT0gcmVnaXN0ZXJJRCkKLSAgICAgICAgbV9tYXBwZWRQYXlsb2FkID0gKFJl
Z2lzdGVySUQpLTE7Ci19Ci0KLWlubGluZSB2b2lkIEpJVDo6dW5tYXAoKQotewotICAgIG1fbWFw
cGVkQnl0ZWNvZGVPZmZzZXQgPSAodW5zaWduZWQpLTE7Ci0gICAgbV9tYXBwZWRWaXJ0dWFsUmVn
aXN0ZXJJbmRleCA9IEpTU3RhY2s6OlJldHVyblBDOwotICAgIG1fbWFwcGVkVGFnID0gKFJlZ2lz
dGVySUQpLTE7Ci0gICAgbV9tYXBwZWRQYXlsb2FkID0gKFJlZ2lzdGVySUQpLTE7Ci19Ci0KLWlu
bGluZSBib29sIEpJVDo6aXNNYXBwZWQoaW50IHZpcnR1YWxSZWdpc3RlckluZGV4KQotewotICAg
IGlmIChtX21hcHBlZEJ5dGVjb2RlT2Zmc2V0ICE9IG1fYnl0ZWNvZGVPZmZzZXQpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBpZiAobV9tYXBwZWRWaXJ0dWFsUmVnaXN0ZXJJbmRleCAhPSB2
aXJ0dWFsUmVnaXN0ZXJJbmRleCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0
cnVlOwotfQotCi1pbmxpbmUgYm9vbCBKSVQ6OmdldE1hcHBlZFBheWxvYWQoaW50IHZpcnR1YWxS
ZWdpc3RlckluZGV4LCBSZWdpc3RlcklEJiBwYXlsb2FkKQotewotICAgIGlmIChtX21hcHBlZEJ5
dGVjb2RlT2Zmc2V0ICE9IG1fYnl0ZWNvZGVPZmZzZXQpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBpZiAobV9tYXBwZWRWaXJ0dWFsUmVnaXN0ZXJJbmRleCAhPSB2aXJ0dWFsUmVnaXN0ZXJJ
bmRleCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChtX21hcHBlZFBheWxvYWQgPT0g
KFJlZ2lzdGVySUQpLTEpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBwYXlsb2FkID0gbV9t
YXBwZWRQYXlsb2FkOwotICAgIHJldHVybiB0cnVlOwotfQotCi1pbmxpbmUgYm9vbCBKSVQ6Omdl
dE1hcHBlZFRhZyhpbnQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIFJlZ2lzdGVySUQmIHRhZykKLXsK
LSAgICBpZiAobV9tYXBwZWRCeXRlY29kZU9mZnNldCAhPSBtX2J5dGVjb2RlT2Zmc2V0KQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG1fbWFwcGVkVmlydHVhbFJlZ2lzdGVySW5kZXgg
IT0gdmlydHVhbFJlZ2lzdGVySW5kZXgpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAo
bV9tYXBwZWRUYWcgPT0gKFJlZ2lzdGVySUQpLTEpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB0YWcgPSBtX21hcHBlZFRhZzsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotaW5saW5lIHZvaWQg
SklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoaW50IHZpcnR1YWxSZWdpc3RlckluZGV4
KQotewotICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25Ob3RJbW1lZGlhdGUodmlydHVhbFJl
Z2lzdGVySW5kZXgpKSB7Ci0gICAgICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lz
dGVySW5kZXgodmlydHVhbFJlZ2lzdGVySW5kZXgpKQotICAgICAgICAgICAgYWRkU2xvd0Nhc2Uo
anVtcCgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoZW1pdEp1bXBJ
Zk5vdEpTQ2VsbCh2aXJ0dWFsUmVnaXN0ZXJJbmRleCkpOwotICAgIH0KLX0KLQotaW5saW5lIHZv
aWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoaW50IHZpcnR1YWxSZWdpc3Rlcklu
ZGV4LCBSZWdpc3RlcklEIHRhZykKLXsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duTm90
SW1tZWRpYXRlKHZpcnR1YWxSZWdpc3RlckluZGV4KSkgewotICAgICAgICBpZiAobV9jb2RlQmxv
Y2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHZpcnR1YWxSZWdpc3RlckluZGV4KSkKLSAgICAg
ICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCB0YWcsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpD
ZWxsVGFnKSkpOwotICAgIH0KLX0KLQotQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5k
Q29uc3RhbnRJbW1lZGlhdGVJbnQodW5zaWduZWQgc3JjKQotewotICAgIHJldHVybiBtX2NvZGVC
bG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoc3JjKSAmJiBnZXRDb25zdGFudE9wZXJhbmQo
c3JjKS5pc0ludDMyKCk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmdldE9wZXJhbmRD
b25zdGFudEltbWVkaWF0ZUludCh1bnNpZ25lZCBvcDEsIHVuc2lnbmVkIG9wMiwgdW5zaWduZWQm
IG9wLCBpbnQzMl90JiBjb25zdGFudCkKLXsKLSAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbW1l
ZGlhdGVJbnQob3AxKSkgewotICAgICAgICBjb25zdGFudCA9IGdldENvbnN0YW50T3BlcmFuZChv
cDEpLmFzSW50MzIoKTsKLSAgICAgICAgb3AgPSBvcDI7Ci0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLQotICAgIGlmIChpc09wZXJhbmRDb25zdGFudEltbWVkaWF0ZUludChvcDIpKSB7Ci0g
ICAgICAgIGNvbnN0YW50ID0gZ2V0Q29uc3RhbnRPcGVyYW5kKG9wMikuYXNJbnQzMigpOwotICAg
ICAgICBvcCA9IG9wMTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIAotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQotI2Vsc2UgLy8gVVNFKEpTVkFMVUUzMl82NCkKLQotLyogRGVwcmVj
YXRlZDogUGxlYXNlIHVzZSBKSVRTdHViQ2FsbCBpbnN0ZWFkLiAqLwotCi1BTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjplbWl0R2V0SklUU3R1YkFyZyh1bnNpZ25lZCBhcmd1bWVudE51bWJlciwgUmVn
aXN0ZXJJRCBkc3QpCi17Ci0gICAgdW5zaWduZWQgYXJndW1lbnRTdGFja09mZnNldCA9IChhcmd1
bWVudE51bWJlciAqIChzaXplb2YoSlNWYWx1ZSkgLyBzaXplb2Yodm9pZCopKSkgKyBKSVRTVEFD
S0ZSQU1FX0FSR1NfSU5ERVg7Ci0gICAgcGVlazY0KGRzdCwgYXJndW1lbnRTdGFja09mZnNldCk7
Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmtpbGxMYXN0UmVzdWx0UmVnaXN0ZXIoKQot
ewotICAgIG1fbGFzdFJlc3VsdEJ5dGVjb2RlUmVnaXN0ZXIgPSBzdGQ6Om51bWVyaWNfbGltaXRz
PGludD46Om1heCgpOwotfQotCi0vLyBnZXQgYXJnIHB1dHMgYW4gYXJnIGZyb20gdGhlIFNGIHJl
Z2lzdGVyIGFycmF5IGludG8gYSBoL3cgcmVnaXN0ZXIKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6
OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW50IHNyYywgUmVnaXN0ZXJJRCBkc3QpCi17Ci0gICAg
QVNTRVJUKG1fYnl0ZWNvZGVPZmZzZXQgIT0gKHVuc2lnbmVkKS0xKTsgLy8gVGhpcyBtZXRob2Qg
c2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNv
IHRoYXQgbV9ieXRlY29kZU9mZnNldCBpcyBzZXQuCi0KLSAgICAvLyBUT0RPOiB3ZSB3YW50IHRv
IHJldXNlIHZhbHVlcyB0aGF0IGFyZSBhbHJlYWR5IGluIHJlZ2lzdGVycyBpZiB3ZSBjYW4gLSBh
ZGQgYSByZWdpc3RlciBhbGxvY2F0b3IhCi0gICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50
UmVnaXN0ZXJJbmRleChzcmMpKSB7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2NvZGVCbG9j
ay0+Z2V0Q29uc3RhbnQoc3JjKTsKLSAgICAgICAgaWYgKCF2YWx1ZS5pc051bWJlcigpKQotICAg
ICAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGRzdCk7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1vdmUoSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZh
bHVlKSksIGRzdCk7Ci0gICAgICAgIGtpbGxMYXN0UmVzdWx0UmVnaXN0ZXIoKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGlmIChzcmMgPT0gbV9sYXN0UmVzdWx0Qnl0ZWNvZGVSZWdp
c3RlciAmJiBtX2NvZGVCbG9jay0+aXNUZW1wb3JhcnlSZWdpc3RlckluZGV4KHNyYykgJiYgIWF0
SnVtcFRhcmdldCgpKSB7Ci0gICAgICAgIC8vIFRoZSBhcmd1bWVudCB3ZSB3YW50IGlzIGFscmVh
ZHkgc3RvcmVkIGluIGVheAotICAgICAgICBpZiAoZHN0ICE9IGNhY2hlZFJlc3VsdFJlZ2lzdGVy
KQotICAgICAgICAgICAgbW92ZShjYWNoZWRSZXN1bHRSZWdpc3RlciwgZHN0KTsKLSAgICAgICAg
a2lsbExhc3RSZXN1bHRSZWdpc3RlcigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
bG9hZDY0KEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIHNyYyAqIHNpemVvZihSZWdpc3Rlcikp
LCBkc3QpOwotICAgIGtpbGxMYXN0UmVzdWx0UmVnaXN0ZXIoKTsKLX0KLQotQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoaW50IHNyYzEsIFJlZ2lzdGVySUQg
ZHN0MSwgaW50IHNyYzIsIFJlZ2lzdGVySUQgZHN0MikKLXsKLSAgICBpZiAoc3JjMiA9PSBtX2xh
c3RSZXN1bHRCeXRlY29kZVJlZ2lzdGVyKSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc3JjMiwgZHN0Mik7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgZHN0
MSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCBk
c3QxKTsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMyLCBkc3QyKTsKLSAgICB9
Ci19Ci0KLUFMV0FZU19JTkxJTkUgaW50MzJfdCBKSVQ6OmdldENvbnN0YW50T3BlcmFuZEltbWVk
aWF0ZUludCh1bnNpZ25lZCBzcmMpCi17Ci0gICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChz
cmMpLmFzSW50MzIoKTsKLX0KLQotQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29u
c3RhbnRJbW1lZGlhdGVJbnQodW5zaWduZWQgc3JjKQotewotICAgIHJldHVybiBtX2NvZGVCbG9j
ay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoc3JjKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3Jj
KS5pc0ludDMyKCk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIodW5zaWduZWQgZHN0LCBSZWdpc3RlcklEIGZyb20pCi17Ci0gICAgc3RvcmU2NChm
cm9tLCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBkc3QgKiBzaXplb2YoUmVnaXN0ZXIpKSk7
Ci0gICAgbV9sYXN0UmVzdWx0Qnl0ZWNvZGVSZWdpc3RlciA9IChmcm9tID09IGNhY2hlZFJlc3Vs
dFJlZ2lzdGVyKSA/IHN0YXRpY19jYXN0PGludD4oZHN0KSA6IHN0ZDo6bnVtZXJpY19saW1pdHM8
aW50Pjo6bWF4KCk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRJbml0UmVnaXN0
ZXIodW5zaWduZWQgZHN0KQotewotICAgIHN0b3JlNjQoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKSksIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIGRzdCAqIHNp
emVvZihSZWdpc3RlcikpKTsKLX0KLQotQUxXQVlTX0lOTElORSBKSVQ6Okp1bXAgSklUOjplbWl0
SnVtcElmSlNDZWxsKFJlZ2lzdGVySUQgcmVnKQotewotICAgIHJldHVybiBicmFuY2hUZXN0NjQo
WmVybywgcmVnLCB0YWdNYXNrUmVnaXN0ZXIpOwotfQotCi1BTFdBWVNfSU5MSU5FIEpJVDo6SnVt
cCBKSVQ6OmVtaXRKdW1wSWZCb3RoSlNDZWxscyhSZWdpc3RlcklEIHJlZzEsIFJlZ2lzdGVySUQg
cmVnMiwgUmVnaXN0ZXJJRCBzY3JhdGNoKQotewotICAgIG1vdmUocmVnMSwgc2NyYXRjaCk7Ci0g
ICAgb3I2NChyZWcyLCBzY3JhdGNoKTsKLSAgICByZXR1cm4gZW1pdEp1bXBJZkpTQ2VsbChzY3Jh
dGNoKTsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmSlND
ZWxsKFJlZ2lzdGVySUQgcmVnKQotewotICAgIGFkZFNsb3dDYXNlKGVtaXRKdW1wSWZKU0NlbGwo
cmVnKSk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgSklUOjpKdW1wIEpJVDo6ZW1pdEp1bXBJZk5vdEpT
Q2VsbChSZWdpc3RlcklEIHJlZykKLXsKLSAgICByZXR1cm4gYnJhbmNoVGVzdDY0KE5vblplcm8s
IHJlZywgdGFnTWFza1JlZ2lzdGVyKTsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFJlZ2lzdGVySUQgcmVnKQotewotICAgIGFkZFNsb3dD
YXNlKGVtaXRKdW1wSWZOb3RKU0NlbGwocmVnKSk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChSZWdpc3RlcklEIHJlZywgaW50IHZSZWcp
Ci17Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bk5vdEltbWVkaWF0ZSh2UmVnKSkKLSAg
ICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZyk7Ci19Ci0KLWlubGluZSB2b2lk
IEpJVDo6ZW1pdExvYWREb3VibGUoaW50IGluZGV4LCBGUFJlZ2lzdGVySUQgdmFsdWUpCi17Ci0g
ICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbmRleCkpIHsKLSAg
ICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBpbkNvbnN0YW50UG9vbCA9IG1fY29kZUJsb2Nr
LT5jb25zdGFudFJlZ2lzdGVyKGluZGV4KTsKLSAgICAgICAgbG9hZERvdWJsZSgmaW5Db25zdGFu
dFBvb2wsIHZhbHVlKTsKLSAgICB9IGVsc2UKLSAgICAgICAgbG9hZERvdWJsZShhZGRyZXNzRm9y
KGluZGV4KSwgdmFsdWUpOwotfQotCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkSW50MzJUb0Rv
dWJsZShpbnQgaW5kZXgsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKLXsKLSAgICBpZiAobV9jb2RlQmxv
Y2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGluZGV4KSkgewotICAgICAgICBBU1NFUlQoaXNP
cGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVJbnQoaW5kZXgpKTsKLSAgICAgICAgY29udmVydEludDMy
VG9Eb3VibGUoSW1tMzIoZ2V0Q29uc3RhbnRPcGVyYW5kKGluZGV4KS5hc0ludDMyKCkpLCB2YWx1
ZSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKGFkZHJlc3NGb3Io
aW5kZXgpLCB2YWx1ZSk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgSklUOjpKdW1wIEpJVDo6ZW1pdEp1
bXBJZkltbWVkaWF0ZUludGVnZXIoUmVnaXN0ZXJJRCByZWcpCi17Ci0gICAgcmV0dXJuIGJyYW5j
aDY0KEFib3ZlT3JFcXVhbCwgcmVnLCB0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOwotfQotCi1BTFdB
WVNfSU5MSU5FIEpJVDo6SnVtcCBKSVQ6OmVtaXRKdW1wSWZOb3RJbW1lZGlhdGVJbnRlZ2VyKFJl
Z2lzdGVySUQgcmVnKQotewotICAgIHJldHVybiBicmFuY2g2NChCZWxvdywgcmVnLCB0YWdUeXBl
TnVtYmVyUmVnaXN0ZXIpOwotfQotCi1BTFdBWVNfSU5MSU5FIEpJVDo6SnVtcCBKSVQ6OmVtaXRK
dW1wSWZOb3RJbW1lZGlhdGVJbnRlZ2VycyhSZWdpc3RlcklEIHJlZzEsIFJlZ2lzdGVySUQgcmVn
MiwgUmVnaXN0ZXJJRCBzY3JhdGNoKQotewotICAgIG1vdmUocmVnMSwgc2NyYXRjaCk7Ci0gICAg
YW5kNjQocmVnMiwgc2NyYXRjaCk7Ci0gICAgcmV0dXJuIGVtaXRKdW1wSWZOb3RJbW1lZGlhdGVJ
bnRlZ2VyKHNjcmF0Y2gpOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNs
b3dDYXNlSWZOb3RJbW1lZGlhdGVJbnRlZ2VyKFJlZ2lzdGVySUQgcmVnKQotewotICAgIGFkZFNs
b3dDYXNlKGVtaXRKdW1wSWZOb3RJbW1lZGlhdGVJbnRlZ2VyKHJlZykpOwotfQotCi1BTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1lZGlhdGVJbnRlZ2VycyhS
ZWdpc3RlcklEIHJlZzEsIFJlZ2lzdGVySUQgcmVnMiwgUmVnaXN0ZXJJRCBzY3JhdGNoKQotewot
ICAgIGFkZFNsb3dDYXNlKGVtaXRKdW1wSWZOb3RJbW1lZGlhdGVJbnRlZ2VycyhyZWcxLCByZWcy
LCBzY3JhdGNoKSk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEltbWVkaWF0ZU51bWJlcihSZWdpc3RlcklEIHJlZykKLXsKLSAgICBhZGRTbG93Q2Fz
ZShlbWl0SnVtcElmTm90SW1tZWRpYXRlTnVtYmVyKHJlZykpOwotfQotCi1BTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjplbWl0RmFzdEFyaXRoUmVUYWdJbW1lZGlhdGUoUmVnaXN0ZXJJRCBzcmMsIFJl
Z2lzdGVySUQgZGVzdCkKLXsKLSAgICBlbWl0RmFzdEFyaXRoSW50VG9JbW1Ob0NoZWNrKHNyYywg
ZGVzdCk7Ci19Ci0KLS8vIG9wZXJhbmQgaXMgaW50MzJfdCwgbXVzdCBoYXZlIGJlZW4gemVyby1l
eHRlbmRlZCBpZiByZWdpc3RlciBpcyA2NC1iaXQuCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpl
bWl0RmFzdEFyaXRoSW50VG9JbW1Ob0NoZWNrKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRl
c3QpCi17Ci0gICAgaWYgKHNyYyAhPSBkZXN0KQotICAgICAgICBtb3ZlKHNyYywgZGVzdCk7Ci0g
ICAgb3I2NCh0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIGRlc3QpOwotfQotCi1BTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjplbWl0VGFnQXNCb29sSW1tZWRpYXRlKFJlZ2lzdGVySUQgcmVnKQotewotICAg
IG9yMzIoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwgcmVn
KTsKLX0KLQotI2VuZGlmIC8vIFVTRShKU1ZBTFVFMzJfNjQpCi0KLX0gLy8gbmFtZXNwYWNlIEpT
QwotCi0jZW5kaWYgLy8gRU5BQkxFKEpJVCkKLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVElubGluZXMuaAkocmV2aXNpb24gMTMzMzg5KQkoZnJvbSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVElubGluZU1ldGhvZHMuaDoxMzMzODkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEw
MDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBKSVRJbmxpbmVNZXRob2RzX2gKKyNkZWZpbmUgSklUSW5saW5lTWV0aG9kc19o
CisKKworI2lmIEVOQUJMRShKSVQpCisKK25hbWVzcGFjZSBKU0MgeworCitBTFdBWVNfSU5MSU5F
IGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudEltbWVkaWF0ZURvdWJsZSh1bnNpZ25lZCBzcmMp
Cit7CisgICAgcmV0dXJuIG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChzcmMp
ICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzRG91YmxlKCk7Cit9CisKK0FMV0FZU19JTkxJ
TkUgSlNWYWx1ZSBKSVQ6OmdldENvbnN0YW50T3BlcmFuZCh1bnNpZ25lZCBzcmMpCit7CisgICAg
QVNTRVJUKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChzcmMpKTsKKyAgICBy
ZXR1cm4gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7Cit9CisKK0FMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OmVtaXRQdXRDZWxsVG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBK
U1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJFbnRyeSBlbnRyeSkKK3sKKyNpZiBVU0UoSlNWQUxVRTMy
XzY0KQorICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCB0YWdGb3Io
ZW50cnksIGNhbGxGcmFtZVJlZ2lzdGVyKSk7CisgICAgc3RvcmUzMihmcm9tLCBwYXlsb2FkRm9y
KGVudHJ5LCBjYWxsRnJhbWVSZWdpc3RlcikpOworI2Vsc2UKKyAgICBzdG9yZTY0KGZyb20sIGFk
ZHJlc3NGb3IoZW50cnksIGNhbGxGcmFtZVJlZ2lzdGVyKSk7CisjZW5kaWYKK30KKworQUxXQVlT
X0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dEludFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQg
ZnJvbSwgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyRW50cnkgZW50cnkpCit7CisjaWYgVVNFKEpT
VkFMVUUzMl82NCkKKyAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihJbnQzMlRhZyksIGludFRhZ0Zv
cihlbnRyeSwgY2FsbEZyYW1lUmVnaXN0ZXIpKTsKKyAgICBzdG9yZTMyKGZyb20sIGludFBheWxv
YWRGb3IoZW50cnksIGNhbGxGcmFtZVJlZ2lzdGVyKSk7CisjZWxzZQorICAgIHN0b3JlNjQoZnJv
bSwgYWRkcmVzc0ZvcihlbnRyeSwgY2FsbEZyYW1lUmVnaXN0ZXIpKTsKKyNlbmRpZgorfQorCitB
TFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJ
RCBmcm9tLCBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJFbnRyeSBlbnRyeSkKK3sKKyNpZiBVU0Uo
SlNWQUxVRTMyXzY0KQorICAgIHN0b3JlUHRyKGZyb20sIHBheWxvYWRGb3IoZW50cnksIGNhbGxG
cmFtZVJlZ2lzdGVyKSk7CisjZWxzZQorICAgIHN0b3JlNjQoZnJvbSwgYWRkcmVzc0ZvcihlbnRy
eSwgY2FsbEZyYW1lUmVnaXN0ZXIpKTsKKyNlbmRpZgorfQorCitBTFdBWVNfSU5MSU5FIHZvaWQg
SklUOjplbWl0UHV0SW1tZWRpYXRlVG9DYWxsRnJhbWVIZWFkZXIodm9pZCogdmFsdWUsIEpTU3Rh
Y2s6OkNhbGxGcmFtZUhlYWRlckVudHJ5IGVudHJ5KQoreworICAgIHN0b3JlUHRyKFRydXN0ZWRJ
bW1QdHIodmFsdWUpLCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBlbnRyeSAqIHNpemVvZihS
ZWdpc3RlcikpKTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldEZyb21DYWxs
RnJhbWVIZWFkZXJQdHIoSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyRW50cnkgZW50cnksIFJlZ2lz
dGVySUQgdG8sIFJlZ2lzdGVySUQgZnJvbSkKK3sKKyAgICBsb2FkUHRyKEFkZHJlc3MoZnJvbSwg
ZW50cnkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgdG8pOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAg
a2lsbExhc3RSZXN1bHRSZWdpc3RlcigpOworI2VuZGlmCit9CisKK0FMV0FZU19JTkxJTkUgdm9p
ZCBKSVQ6OmVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyMzIoSlNTdGFjazo6Q2FsbEZyYW1lSGVh
ZGVyRW50cnkgZW50cnksIFJlZ2lzdGVySUQgdG8sIFJlZ2lzdGVySUQgZnJvbSkKK3sKKyAgICBs
b2FkMzIoQWRkcmVzcyhmcm9tLCBlbnRyeSAqIHNpemVvZihSZWdpc3RlcikpLCB0byk7CisjaWYg
VVNFKEpTVkFMVUU2NCkKKyAgICBraWxsTGFzdFJlc3VsdFJlZ2lzdGVyKCk7CisjZW5kaWYKK30K
KworI2lmIFVTRShKU1ZBTFVFNjQpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0RnJv
bUNhbGxGcmFtZUhlYWRlcjY0KEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlckVudHJ5IGVudHJ5LCBS
ZWdpc3RlcklEIHRvLCBSZWdpc3RlcklEIGZyb20pCit7CisgICAgbG9hZDY0KEFkZHJlc3MoZnJv
bSwgZW50cnkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgdG8pOworICAgIGtpbGxMYXN0UmVzdWx0UmVn
aXN0ZXIoKTsKK30KKyNlbmRpZgorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0TG9hZENo
YXJhY3RlclN0cmluZyhSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QsIEp1bXBMaXN0JiBm
YWlsdXJlcykKK3sKKyAgICBmYWlsdXJlcy5hcHBlbmQoYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRy
ZXNzKHNyYywgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIobV9nbG9i
YWxEYXRhLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CisgICAgZmFpbHVyZXMuYXBwZW5kKGJy
YW5jaDMyKE5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzcmMsIFRodW5rSGVscGVy
czo6anNTdHJpbmdMZW5ndGhPZmZzZXQoKSksIFRydXN0ZWRJbW0zMigxKSkpOworICAgIGxvYWRQ
dHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3JjLCBUaHVua0hlbHBlcnM6OmpzU3RyaW5nVmFs
dWVPZmZzZXQoKSksIGRzdCk7CisgICAgZmFpbHVyZXMuYXBwZW5kKGJyYW5jaFRlc3QzMihaZXJv
LCBkc3QpKTsKKyAgICBsb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGRzdCwgVGh1bmtI
ZWxwZXJzOjpzdHJpbmdJbXBsRmxhZ3NPZmZzZXQoKSksIHJlZ1QxKTsKKyAgICBsb2FkUHRyKE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGRzdCwgVGh1bmtIZWxwZXJzOjpzdHJpbmdJbXBsRGF0YU9m
ZnNldCgpKSwgZHN0KTsKKworICAgIEp1bXBMaXN0IGlzMTZCaXQ7CisgICAgSnVtcExpc3QgY29u
dDhCaXQ7CisgICAgaXMxNkJpdC5hcHBlbmQoYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QxLCBUcnVz
dGVkSW1tMzIoVGh1bmtIZWxwZXJzOjpzdHJpbmdJbXBsOEJpdEZsYWcoKSkpKTsKKyAgICBsb2Fk
OChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhkc3QsIDApLCBkc3QpOworICAgIGNvbnQ4Qml0LmFw
cGVuZChqdW1wKCkpOworICAgIGlzMTZCaXQubGluayh0aGlzKTsKKyAgICBsb2FkMTYoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoZHN0LCAwKSwgZHN0KTsKKyAgICBjb250OEJpdC5saW5rKHRoaXMp
OworfQorCitBTFdBWVNfSU5MSU5FIEpJVDo6Q2FsbCBKSVQ6OmVtaXROYWtlZENhbGwoQ29kZVB0
ciBmdW5jdGlvbikKK3sKKyAgICBBU1NFUlQobV9ieXRlY29kZU9mZnNldCAhPSAodW5zaWduZWQp
LTEpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xk
IHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlT2Zmc2V0IGlzIHNldC4KKworICAg
IENhbGwgbmFrZWRDYWxsID0gbmVhckNhbGwoKTsKKyAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVj
b3JkKG5ha2VkQ2FsbCwgbV9ieXRlY29kZU9mZnNldCwgZnVuY3Rpb24uZXhlY3V0YWJsZUFkZHJl
c3MoKSkpOworICAgIHJldHVybiBuYWtlZENhbGw7Cit9CisKK0FMV0FZU19JTkxJTkUgYm9vbCBK
SVQ6OmF0SnVtcFRhcmdldCgpCit7CisgICAgd2hpbGUgKG1fanVtcFRhcmdldHNQb3NpdGlvbiA8
IG1fY29kZUJsb2NrLT5udW1iZXJPZkp1bXBUYXJnZXRzKCkgJiYgbV9jb2RlQmxvY2stPmp1bXBU
YXJnZXQobV9qdW1wVGFyZ2V0c1Bvc2l0aW9uKSA8PSBtX2J5dGVjb2RlT2Zmc2V0KSB7CisgICAg
ICAgIGlmIChtX2NvZGVCbG9jay0+anVtcFRhcmdldChtX2p1bXBUYXJnZXRzUG9zaXRpb24pID09
IG1fYnl0ZWNvZGVPZmZzZXQpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgKytt
X2p1bXBUYXJnZXRzUG9zaXRpb247CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworI2lm
IGRlZmluZWQoQVNTRU1CTEVSX0hBU19DT05TVEFOVF9QT09MKSAmJiBBU1NFTUJMRVJfSEFTX0NP
TlNUQU5UX1BPT0wKKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YmVnaW5VbmludGVycnVwdGVk
U2VxdWVuY2UoaW50IGluc25TcGFjZSwgaW50IGNvbnN0U3BhY2UpCit7CisjaWYgQ1BVKEFSTV9U
UkFESVRJT05BTCkKKyNpZm5kZWYgTkRFQlVHCisgICAgLy8gRW5zdXJlIHRoZSBsYWJlbCBhZnRl
ciB0aGUgc2VxdWVuY2UgY2FuIGFsc28gZml0CisgICAgaW5zblNwYWNlICs9IHNpemVvZihBUk1X
b3JkKTsKKyAgICBjb25zdFNwYWNlICs9IHNpemVvZih1aW50NjRfdCk7CisjZW5kaWYKKworICAg
IGVuc3VyZVNwYWNlKGluc25TcGFjZSwgY29uc3RTcGFjZSk7CisKKyNlbGlmIENQVShTSDQpCisj
aWZuZGVmIE5ERUJVRworICAgIGluc25TcGFjZSArPSBzaXplb2YoU0g0V29yZCk7CisgICAgY29u
c3RTcGFjZSArPSBzaXplb2YodWludDY0X3QpOworI2VuZGlmCisKKyAgICBtX2Fzc2VtYmxlci5l
bnN1cmVTcGFjZShpbnNuU3BhY2UgKyBtX2Fzc2VtYmxlci5tYXhJbnN0cnVjdGlvblNpemUgKyAy
LCBjb25zdFNwYWNlICsgOCk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoQVNTRU1CTEVSX0hBU19D
T05TVEFOVF9QT09MKSAmJiBBU1NFTUJMRVJfSEFTX0NPTlNUQU5UX1BPT0wKKyNpZm5kZWYgTkRF
QlVHCisgICAgbV91bmludGVycnVwdGVkSW5zdHJ1Y3Rpb25TZXF1ZW5jZUJlZ2luID0gbGFiZWwo
KTsKKyAgICBtX3VuaW50ZXJydXB0ZWRDb25zdGFudFNlcXVlbmNlQmVnaW4gPSBzaXplT2ZDb25z
dGFudFBvb2woKTsKKyNlbmRpZgorI2VuZGlmCit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6
OmVuZFVuaW50ZXJydXB0ZWRTZXF1ZW5jZShpbnQgaW5zblNwYWNlLCBpbnQgY29uc3RTcGFjZSwg
aW50IGRzdCkKK3sKKyAgICBVTlVTRURfUEFSQU0oZHN0KTsKKyNpZiBkZWZpbmVkKEFTU0VNQkxF
Ul9IQVNfQ09OU1RBTlRfUE9PTCkgJiYgQVNTRU1CTEVSX0hBU19DT05TVEFOVF9QT09MCisgICAg
LyogVGhlcmUgYXJlIHNldmVyYWwgY2FzZXMgd2hlbiB0aGUgdW5pbnRlcnJ1cHRlZCBzZXF1ZW5j
ZSBpcyBsYXJnZXIgdGhhbgorICAgICAqIG1heGltdW0gcmVxdWlyZWQgb2Zmc2V0IGZvciBwYXRo
aW5nIHRoZSBzYW1lIHNlcXVlbmNlLiBFZy46IGlmIGluIGEKKyAgICAgKiB1bmludGVycnVwdGVk
IHNlcXVlbmNlIHRoZSBsYXN0IG1hY3JvYXNzZW1ibGVyJ3MgaW5zdHJ1Y3Rpb24gaXMgYSBzdHVi
CisgICAgICogY2FsbCwgaXQgZW1pdHMgc3RvcmUgaW5zdHJ1Y3Rpb24ocykgd2hpY2ggc2hvdWxk
IG5vdCBiZSBpbmNsdWRlZCBpbiB0aGUKKyAgICAgKiBjYWxjdWxhdGlvbiBvZiBsZW5ndGggb2Yg
dW5pbnRlcnJ1cHRlZCBzZXF1ZW5jZS4gU28sIHRoZSBpbnNuU3BhY2UgYW5kCisgICAgICogY29u
c3RTcGFjZSBzaG91bGQgYmUgdXBwZXIgbGltaXQgaW5zdGVhZCBvZiBoYXJkIGxpbWl0LgorICAg
ICAqLworI2lmIENQVShTSDQpCisgICAgaWYgKChkc3QgPiAxNSkgfHwgKGRzdCA8IC0xNikpIHsK
KyAgICAgICAgaW5zblNwYWNlICs9IDg7CisgICAgICAgIGNvbnN0U3BhY2UgKz0gMjsKKyAgICB9
CisKKyAgICBpZiAoKChkc3QgPj0gLTE2KSAmJiAoZHN0IDwgMCkpIHx8ICgoZHN0ID4gNykgJiYg
KGRzdCA8PSAxNSkpKQorICAgICAgICBpbnNuU3BhY2UgKz0gODsKKyNlbmRpZgorICAgIEFTU0VS
VChkaWZmZXJlbmNlQmV0d2VlbihtX3VuaW50ZXJydXB0ZWRJbnN0cnVjdGlvblNlcXVlbmNlQmVn
aW4sIGxhYmVsKCkpIDw9IGluc25TcGFjZSk7CisgICAgQVNTRVJUKHNpemVPZkNvbnN0YW50UG9v
bCgpIC0gbV91bmludGVycnVwdGVkQ29uc3RhbnRTZXF1ZW5jZUJlZ2luIDw9IGNvbnN0U3BhY2Up
OworI2VuZGlmCit9CisKKyNlbmRpZgorCisjaWYgQ1BVKEFSTSkKKworQUxXQVlTX0lOTElORSB2
b2lkIEpJVDo6cHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKFJlZ2lzdGVySUQgcmVnKQor
eworICAgIG1vdmUobGlua1JlZ2lzdGVyLCByZWcpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQg
SklUOjpyZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihSZWdpc3RlcklEIHJlZykKK3sK
KyAgICBtb3ZlKHJlZywgbGlua1JlZ2lzdGVyKTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJ
VDo6cmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4oQWRkcmVzcyBhZGRyZXNzKQorewor
ICAgIGxvYWRQdHIoYWRkcmVzcywgbGlua1JlZ2lzdGVyKTsKK30KKyNlbGlmIENQVShTSDQpCisK
K0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChS
ZWdpc3RlcklEIHJlZykKK3sKKyAgICBtX2Fzc2VtYmxlci5zdHNwcihyZWcpOworfQorCitBTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjpyZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihSZWdp
c3RlcklEIHJlZykKK3sKKyAgICBtX2Fzc2VtYmxlci5sZHNwcihyZWcpOworfQorCitBTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjpyZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihBZGRyZXNz
IGFkZHJlc3MpCit7CisgICAgbG9hZFB0ckxpbmtSZWcoYWRkcmVzcyk7Cit9CisKKyNlbGlmIENQ
VShNSVBTKQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpwcmVzZXJ2ZVJldHVybkFkZHJlc3NB
ZnRlckNhbGwoUmVnaXN0ZXJJRCByZWcpCit7CisgICAgbW92ZShyZXR1cm5BZGRyZXNzUmVnaXN0
ZXIsIHJlZyk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnJlc3RvcmVSZXR1cm5BZGRy
ZXNzQmVmb3JlUmV0dXJuKFJlZ2lzdGVySUQgcmVnKQoreworICAgIG1vdmUocmVnLCByZXR1cm5B
ZGRyZXNzUmVnaXN0ZXIpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpyZXN0b3JlUmV0
dXJuQWRkcmVzc0JlZm9yZVJldHVybihBZGRyZXNzIGFkZHJlc3MpCit7CisgICAgbG9hZFB0cihh
ZGRyZXNzLCByZXR1cm5BZGRyZXNzUmVnaXN0ZXIpOworfQorCisjZWxzZSAvLyBDUFUoWDg2KSB8
fCBDUFUoWDg2XzY0KQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpwcmVzZXJ2ZVJldHVybkFk
ZHJlc3NBZnRlckNhbGwoUmVnaXN0ZXJJRCByZWcpCit7CisgICAgcG9wKHJlZyk7Cit9CisKK0FM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKFJl
Z2lzdGVySUQgcmVnKQoreworICAgIHB1c2gocmVnKTsKK30KKworQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6cmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4oQWRkcmVzcyBhZGRyZXNzKQor
eworICAgIHB1c2goYWRkcmVzcyk7Cit9CisKKyNlbmRpZgorCitBTFdBWVNfSU5MSU5FIHZvaWQg
SklUOjpyZXN0b3JlQXJndW1lbnRSZWZlcmVuY2UoKQoreworICAgIG1vdmUoc3RhY2tQb2ludGVy
UmVnaXN0ZXIsIGZpcnN0QXJndW1lbnRSZWdpc3Rlcik7CisgICAgcG9rZShjYWxsRnJhbWVSZWdp
c3RlciwgT0JKRUNUX09GRlNFVE9GKHN0cnVjdCBKSVRTdGFja0ZyYW1lLCBjYWxsRnJhbWUpIC8g
c2l6ZW9mKHZvaWQqKSk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnVwZGF0ZVRvcENh
bGxGcmFtZSgpCit7CisgICAgQVNTRVJUKHN0YXRpY19jYXN0PGludD4obV9ieXRlY29kZU9mZnNl
dCkgPj0gMCk7CisgICAgaWYgKG1fYnl0ZWNvZGVPZmZzZXQpIHsKKyNpZiBVU0UoSlNWQUxVRTMy
XzY0KQorICAgICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5pbnN0cnVj
dGlvbnMoKS5iZWdpbigpICsgbV9ieXRlY29kZU9mZnNldCArIDEpLCBpbnRUYWdGb3IoSlNTdGFj
azo6QXJndW1lbnRDb3VudCkpOworI2Vsc2UKKyAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIo
bV9ieXRlY29kZU9mZnNldCArIDEpLCBpbnRUYWdGb3IoSlNTdGFjazo6QXJndW1lbnRDb3VudCkp
OworI2VuZGlmCisgICAgfQorICAgIHN0b3JlUHRyKGNhbGxGcmFtZVJlZ2lzdGVyLCAmbV9nbG9i
YWxEYXRhLT50b3BDYWxsRnJhbWUpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpyZXN0
b3JlQXJndW1lbnRSZWZlcmVuY2VGb3JUcmFtcG9saW5lKCkKK3sKKyNpZiBDUFUoWDg2KQorICAg
IC8vIFdpdGhpbiBhIHRyYW1wb2xpbmUgdGhlIHJldHVybiBhZGRyZXNzIHdpbGwgYmUgb24gdGhl
IHN0YWNrIGF0IHRoaXMgcG9pbnQuCisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzaXplb2Yodm9p
ZCopKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIsIGZpcnN0QXJndW1lbnRSZWdpc3Rlcik7CisjZWxp
ZiBDUFUoQVJNKQorICAgIG1vdmUoc3RhY2tQb2ludGVyUmVnaXN0ZXIsIGZpcnN0QXJndW1lbnRS
ZWdpc3Rlcik7CisjZWxpZiBDUFUoU0g0KQorICAgIG1vdmUoc3RhY2tQb2ludGVyUmVnaXN0ZXIs
IGZpcnN0QXJndW1lbnRSZWdpc3Rlcik7CisjZW5kaWYKKyAgICAvLyBJbiB0aGUgdHJhbXBvbGlu
ZSBvbiB4ODYtNjQsIHRoZSBmaXJzdCBhcmd1bWVudCByZWdpc3RlciBpcyBub3Qgb3ZlcndyaXR0
ZW4uCit9CisKK0FMV0FZU19JTkxJTkUgSklUOjpKdW1wIEpJVDo6Y2hlY2tTdHJ1Y3R1cmUoUmVn
aXN0ZXJJRCByZWcsIFN0cnVjdHVyZSogc3RydWN0dXJlKQoreworICAgIHJldHVybiBicmFuY2hQ
dHIoTm90RXF1YWwsIEFkZHJlc3MocmVnLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgVHJ1
c3RlZEltbVB0cihzdHJ1Y3R1cmUpKTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bGlu
a1Nsb3dDYXNlSWZOb3RKU0NlbGwoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
ciwgaW50IHZSZWcpCit7CisgICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bk5vdEltbWVkaWF0
ZSh2UmVnKSkKKyAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOworfQorCitBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjphZGRTbG93Q2FzZShKdW1wIGp1bXApCit7CisgICAgQVNTRVJUKG1fYnl0ZWNv
ZGVPZmZzZXQgIT0gKHVuc2lnbmVkKS0xKTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUg
Y2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29k
ZU9mZnNldCBpcyBzZXQuCisKKyAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShq
dW1wLCBtX2J5dGVjb2RlT2Zmc2V0KSk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFk
ZFNsb3dDYXNlKEp1bXBMaXN0IGp1bXBMaXN0KQoreworICAgIEFTU0VSVChtX2J5dGVjb2RlT2Zm
c2V0ICE9ICh1bnNpZ25lZCktMSk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxl
ZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVPZmZz
ZXQgaXMgc2V0LgorCisgICAgY29uc3QgSnVtcExpc3Q6Okp1bXBWZWN0b3ImIGp1bXBWZWN0b3Ig
PSBqdW1wTGlzdC5qdW1wcygpOworICAgIHNpemVfdCBzaXplID0ganVtcFZlY3Rvci5zaXplKCk7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCisgICAgICAgIG1fc2xvd0Nh
c2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KGp1bXBWZWN0b3JbaV0sIG1fYnl0ZWNvZGVPZmZzZXQp
KTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xvd0Nhc2UoKQoreworICAgIEFT
U0VSVChtX2J5dGVjb2RlT2Zmc2V0ICE9ICh1bnNpZ25lZCktMSk7IC8vIFRoaXMgbWV0aG9kIHNo
b3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0
aGF0IG1fYnl0ZWNvZGVPZmZzZXQgaXMgc2V0LgorICAgIAorICAgIEp1bXAgZW1wdHlKdW1wOyAv
LyBEb2luZyBpdCB0aGlzIHdheSB0byBtYWtlIFdpbmRvd3MgaGFwcHkuCisgICAgbV9zbG93Q2Fz
ZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoZW1wdHlKdW1wLCBtX2J5dGVjb2RlT2Zmc2V0KSk7Cit9
CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZEp1bXAoSnVtcCBqdW1wLCBpbnQgcmVsYXRp
dmVPZmZzZXQpCit7CisgICAgQVNTRVJUKG1fYnl0ZWNvZGVPZmZzZXQgIT0gKHVuc2lnbmVkKS0x
KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBw
YXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZU9mZnNldCBpcyBzZXQuCisKKyAgICBt
X2ptcFRhYmxlLmFwcGVuZChKdW1wVGFibGUoanVtcCwgbV9ieXRlY29kZU9mZnNldCArIHJlbGF0
aXZlT2Zmc2V0KSk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd1Rv
SG90KEp1bXAganVtcCwgaW50IHJlbGF0aXZlT2Zmc2V0KQoreworICAgIEFTU0VSVChtX2J5dGVj
b2RlT2Zmc2V0ICE9ICh1bnNpZ25lZCktMSk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJl
IGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNv
ZGVPZmZzZXQgaXMgc2V0LgorCisgICAganVtcC5saW5rVG8obV9sYWJlbHNbbV9ieXRlY29kZU9m
ZnNldCArIHJlbGF0aXZlT2Zmc2V0XSwgdGhpcyk7Cit9CisKK0FMV0FZU19JTkxJTkUgSklUOjpK
dW1wIEpJVDo6ZW1pdEp1bXBJZk5vdE9iamVjdChSZWdpc3RlcklEIHN0cnVjdHVyZVJlZykKK3sK
KyAgICByZXR1cm4gYnJhbmNoOChCZWxvdywgQWRkcmVzcyhzdHJ1Y3R1cmVSZWcsIFN0cnVjdHVy
ZTo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSkpOworfQor
CitBTFdBWVNfSU5MSU5FIEpJVDo6SnVtcCBKSVQ6OmVtaXRKdW1wSWZOb3RUeXBlKFJlZ2lzdGVy
SUQgYmFzZVJlZywgUmVnaXN0ZXJJRCBzY3JhdGNoUmVnLCBKU1R5cGUgdHlwZSkKK3sKKyAgICBs
b2FkUHRyKEFkZHJlc3MoYmFzZVJlZywgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHNjcmF0
Y2hSZWcpOworICAgIHJldHVybiBicmFuY2g4KE5vdEVxdWFsLCBBZGRyZXNzKHNjcmF0Y2hSZWcs
IFN0cnVjdHVyZTo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIodHlwZSkpOwor
fQorCisjaWYgRU5BQkxFKFNBTVBMSU5HX0ZMQUdTKQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6
c2V0U2FtcGxpbmdGbGFnKGludDMyX3QgZmxhZykKK3sKKyAgICBBU1NFUlQoZmxhZyA+PSAxKTsK
KyAgICBBU1NFUlQoZmxhZyA8PSAzMik7CisgICAgb3IzMihUcnVzdGVkSW1tMzIoMXUgPDwgKGZs
YWcgLSAxKSksIEFic29sdXRlQWRkcmVzcyhTYW1wbGluZ0ZsYWdzOjphZGRyZXNzT2ZGbGFncygp
KSk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmNsZWFyU2FtcGxpbmdGbGFnKGludDMy
X3QgZmxhZykKK3sKKyAgICBBU1NFUlQoZmxhZyA+PSAxKTsKKyAgICBBU1NFUlQoZmxhZyA8PSAz
Mik7CisgICAgYW5kMzIoVHJ1c3RlZEltbTMyKH4oMXUgPDwgKGZsYWcgLSAxKSkpLCBBYnNvbHV0
ZUFkZHJlc3MoU2FtcGxpbmdGbGFnczo6YWRkcmVzc09mRmxhZ3MoKSkpOworfQorI2VuZGlmCisK
KyNpZiBFTkFCTEUoU0FNUExJTkdfQ09VTlRFUlMpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpl
bWl0Q291bnQoQWJzdHJhY3RTYW1wbGluZ0NvdW50ZXImIGNvdW50ZXIsIGludDMyX3QgY291bnQp
Cit7CisgICAgYWRkNjQoVHJ1c3RlZEltbTMyKGNvdW50KSwgQWJzb2x1dGVBZGRyZXNzKGNvdW50
ZXIuYWRkcmVzc09mQ291bnRlcigpKSk7Cit9CisjZW5kaWYKKworI2lmIEVOQUJMRShPUENPREVf
U0FNUExJTkcpCisjaWYgQ1BVKFg4Nl82NCkKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnNhbXBs
ZUluc3RydWN0aW9uKEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgYm9vbCBpbkhvc3RGdW5jdGlv
bikKK3sKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9pbnRlcnByZXRlci0+c2FtcGxlcigpLT5z
YW1wbGVTbG90KCkpLCBYODZSZWdpc3RlcnM6OmVjeCk7CisgICAgc3RvcmVQdHIoVHJ1c3RlZElt
bVB0cihtX2ludGVycHJldGVyLT5zYW1wbGVyKCktPmVuY29kZVNhbXBsZShpbnN0cnVjdGlvbiwg
aW5Ib3N0RnVuY3Rpb24pKSwgWDg2UmVnaXN0ZXJzOjplY3gpOworfQorI2Vsc2UKK0FMV0FZU19J
TkxJTkUgdm9pZCBKSVQ6OnNhbXBsZUluc3RydWN0aW9uKEluc3RydWN0aW9uKiBpbnN0cnVjdGlv
biwgYm9vbCBpbkhvc3RGdW5jdGlvbikKK3sKKyAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKG1f
aW50ZXJwcmV0ZXItPnNhbXBsZXIoKS0+ZW5jb2RlU2FtcGxlKGluc3RydWN0aW9uLCBpbkhvc3RG
dW5jdGlvbikpLCBtX2ludGVycHJldGVyLT5zYW1wbGVyKCktPnNhbXBsZVNsb3QoKSk7Cit9Cisj
ZW5kaWYKKyNlbmRpZgorCisjaWYgRU5BQkxFKENPREVCTE9DS19TQU1QTElORykKKyNpZiBDUFUo
WDg2XzY0KQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6c2FtcGxlQ29kZUJsb2NrKENvZGVCbG9j
ayogY29kZUJsb2NrKQoreworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2ludGVycHJldGVyLT5z
YW1wbGVyKCktPmNvZGVCbG9ja1Nsb3QoKSksIFg4NlJlZ2lzdGVyczo6ZWN4KTsKKyAgICBzdG9y
ZVB0cihUcnVzdGVkSW1tUHRyKGNvZGVCbG9jayksIFg4NlJlZ2lzdGVyczo6ZWN4KTsKK30KKyNl
bHNlCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpzYW1wbGVDb2RlQmxvY2soQ29kZUJsb2NrKiBj
b2RlQmxvY2spCit7CisgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihjb2RlQmxvY2spLCBtX2lu
dGVycHJldGVyLT5zYW1wbGVyKCktPmNvZGVCbG9ja1Nsb3QoKSk7Cit9CisjZW5kaWYKKyNlbmRp
ZgorCitBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudEltbWVkaWF0ZUNo
YXIodW5zaWduZWQgc3JjKQoreworICAgIHJldHVybiBtX2NvZGVCbG9jay0+aXNDb25zdGFudFJl
Z2lzdGVySW5kZXgoc3JjKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc1N0cmluZygpICYm
IGFzU3RyaW5nKGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzQ2VsbCgpKS0+bGVuZ3RoKCkgPT0g
MTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIENsYXNzVHlwZSwgTWFya2VkQmxvY2s6OkRlc3Ry
dWN0b3JUeXBlIGRlc3RydWN0b3JUeXBlLCB0eXBlbmFtZSBTdHJ1Y3R1cmVUeXBlPiBpbmxpbmUg
dm9pZCBKSVQ6OmVtaXRBbGxvY2F0ZUJhc2ljSlNPYmplY3QoU3RydWN0dXJlVHlwZSBzdHJ1Y3R1
cmUsIFJlZ2lzdGVySUQgcmVzdWx0LCBSZWdpc3RlcklEIHN0b3JhZ2VQdHIpCit7CisgICAgc2l6
ZV90IHNpemUgPSBDbGFzc1R5cGU6OmFsbG9jYXRpb25TaXplKElOTElORV9TVE9SQUdFX0NBUEFD
SVRZKTsKKyAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IDA7CisgICAgaWYgKGRlc3Ry
dWN0b3JUeXBlID09IE1hcmtlZEJsb2NrOjpOb3JtYWwpCisgICAgICAgIGFsbG9jYXRvciA9ICZt
X2dsb2JhbERhdGEtPmhlYXAuYWxsb2NhdG9yRm9yT2JqZWN0V2l0aE5vcm1hbERlc3RydWN0b3Io
c2l6ZSk7CisgICAgZWxzZSBpZiAoZGVzdHJ1Y3RvclR5cGUgPT0gTWFya2VkQmxvY2s6OkltbW9y
dGFsU3RydWN0dXJlKQorICAgICAgICBhbGxvY2F0b3IgPSAmbV9nbG9iYWxEYXRhLT5oZWFwLmFs
bG9jYXRvckZvck9iamVjdFdpdGhJbW1vcnRhbFN0cnVjdHVyZURlc3RydWN0b3Ioc2l6ZSk7Cisg
ICAgZWxzZQorICAgICAgICBhbGxvY2F0b3IgPSAmbV9nbG9iYWxEYXRhLT5oZWFwLmFsbG9jYXRv
ckZvck9iamVjdFdpdGhvdXREZXN0cnVjdG9yKHNpemUpOworICAgIGxvYWRQdHIoJmFsbG9jYXRv
ci0+bV9mcmVlTGlzdC5oZWFkLCByZXN1bHQpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQ
dHIoWmVybywgcmVzdWx0KSk7CisKKyAgICAvLyByZW1vdmUgdGhlIG9iamVjdCBmcm9tIHRoZSBm
cmVlIGxpc3QKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0KSwgc3RvcmFnZVB0cik7CisgICAg
c3RvcmVQdHIoc3RvcmFnZVB0ciwgJmFsbG9jYXRvci0+bV9mcmVlTGlzdC5oZWFkKTsKKworICAg
IC8vIGluaXRpYWxpemUgdGhlIG9iamVjdCdzIHN0cnVjdHVyZQorICAgIHN0b3JlUHRyKHN0cnVj
dHVyZSwgQWRkcmVzcyhyZXN1bHQsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpKTsKKworICAg
IC8vIGluaXRpYWxpemUgdGhlIG9iamVjdCdzIHByb3BlcnR5IHN0b3JhZ2UgcG9pbnRlcgorICAg
IHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoMCksIEFkZHJlc3MocmVzdWx0LCBKU09iamVjdDo6YnV0
dGVyZmx5T2Zmc2V0KCkpKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSB2b2lk
IEpJVDo6ZW1pdEFsbG9jYXRlSlNGaW5hbE9iamVjdChUIHN0cnVjdHVyZSwgUmVnaXN0ZXJJRCBy
ZXN1bHQsIFJlZ2lzdGVySUQgc2NyYXRjaCkKK3sKKyAgICBlbWl0QWxsb2NhdGVCYXNpY0pTT2Jq
ZWN0PEpTRmluYWxPYmplY3QsIE1hcmtlZEJsb2NrOjpOb25lLCBUPihzdHJ1Y3R1cmUsIHJlc3Vs
dCwgc2NyYXRjaCk7Cit9CisKKyNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCitpbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlKiB2YWx1ZVByb2ZpbGUp
Cit7CisgICAgQVNTRVJUKHNob3VsZEVtaXRQcm9maWxpbmcoKSk7CisgICAgQVNTRVJUKHZhbHVl
UHJvZmlsZSk7CisKKyAgICBjb25zdCBSZWdpc3RlcklEIHZhbHVlID0gcmVnVDA7CisjaWYgVVNF
KEpTVkFMVUUzMl82NCkKKyAgICBjb25zdCBSZWdpc3RlcklEIHZhbHVlVGFnID0gcmVnVDE7Cisj
ZW5kaWYKKyAgICBjb25zdCBSZWdpc3RlcklEIHNjcmF0Y2ggPSByZWdUMzsKKyAgICAKKyAgICBp
ZiAoVmFsdWVQcm9maWxlOjpudW1iZXJPZkJ1Y2tldHMgPT0gMSkgeworICAgICAgICAvLyBXZSdy
ZSBpbiBhIHNpbXBsZSBjb25maWd1cmF0aW9uOiBvbmx5IG9uZSBidWNrZXQsIHNvIHdlIGNhbiBq
dXN0IGRvIGEgZGlyZWN0CisgICAgICAgIC8vIHN0b3JlLgorI2lmIFVTRShKU1ZBTFVFNjQpCisg
ICAgICAgIHN0b3JlNjQodmFsdWUsIHZhbHVlUHJvZmlsZS0+bV9idWNrZXRzKTsKKyNlbHNlCisg
ICAgICAgIEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqIGRlc2NyaXB0b3IgPSBiaXR3aXNlX2Nhc3Q8
RW5jb2RlZFZhbHVlRGVzY3JpcHRvcio+KHZhbHVlUHJvZmlsZS0+bV9idWNrZXRzKTsKKyAgICAg
ICAgc3RvcmUzMih2YWx1ZSwgJmRlc2NyaXB0b3ItPmFzQml0cy5wYXlsb2FkKTsKKyAgICAgICAg
c3RvcmUzMih2YWx1ZVRhZywgJmRlc2NyaXB0b3ItPmFzQml0cy50YWcpOworI2VuZGlmCisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKG1fcmFuZG9tR2VuZXJhdG9yLmdldFVp
bnQzMigpICYgMSkKKyAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBidWNrZXRDb3VudGVy
UmVnaXN0ZXIpOworICAgIGVsc2UKKyAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDMpLCBidWNr
ZXRDb3VudGVyUmVnaXN0ZXIpOworICAgIGFuZDMyKFRydXN0ZWRJbW0zMihWYWx1ZVByb2ZpbGU6
OmJ1Y2tldEluZGV4TWFzayksIGJ1Y2tldENvdW50ZXJSZWdpc3Rlcik7CisgICAgbW92ZShUcnVz
dGVkSW1tUHRyKHZhbHVlUHJvZmlsZS0+bV9idWNrZXRzKSwgc2NyYXRjaCk7CisjaWYgVVNFKEpT
VkFMVUU2NCkKKyAgICBzdG9yZTY0KHZhbHVlLCBCYXNlSW5kZXgoc2NyYXRjaCwgYnVja2V0Q291
bnRlclJlZ2lzdGVyLCBUaW1lc0VpZ2h0KSk7CisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAg
IHN0b3JlMzIodmFsdWUsIEJhc2VJbmRleChzY3JhdGNoLCBidWNrZXRDb3VudGVyUmVnaXN0ZXIs
IFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSkp
OworICAgIHN0b3JlMzIodmFsdWVUYWcsIEJhc2VJbmRleChzY3JhdGNoLCBidWNrZXRDb3VudGVy
UmVnaXN0ZXIsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50
YWcpKSk7CisjZW5kaWYKK30KKworaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdT
aXRlKHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQoreworICAgIGlmICghc2hvdWxkRW1pdFByb2Zp
bGluZygpKQorICAgICAgICByZXR1cm47CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtX2Nv
ZGVCbG9jay0+dmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpKTsK
K30KKworaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKCkKK3sKKyAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKG1fYnl0ZWNvZGVPZmZzZXQpOworfQorI2VuZGlmIC8vIEVO
QUJMRShWQUxVRV9QUk9GSUxFUikKKworaW5saW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9maWxp
bmdTaXRlKFJlZ2lzdGVySUQgc3RydWN0dXJlQW5kSW5kZXhpbmdUeXBlLCBSZWdpc3RlcklEIHNj
cmF0Y2gsIEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlKQoreworICAgIFVOVVNFRF9QQVJBTShz
Y3JhdGNoKTsgLy8gV2UgaGFkIGZvdW5kIHRoaXMgc2NyYXRjaCByZWdpc3RlciB1c2VmdWwgaGVy
ZSBiZWZvcmUsIHNvIEkgd2lsbCBrZWVwIGl0IGZvciBub3cuCisgICAgCisgICAgUmVnaXN0ZXJJ
RCBzdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmVBbmRJbmRleGluZ1R5cGU7CisgICAgUmVnaXN0ZXJJRCBp
bmRleGluZ1R5cGUgPSBzdHJ1Y3R1cmVBbmRJbmRleGluZ1R5cGU7CisgICAgCisgICAgaWYgKGNh
bkJlT3B0aW1pemVkKCkpCisgICAgICAgIHN0b3JlUHRyKHN0cnVjdHVyZSwgYXJyYXlQcm9maWxl
LT5hZGRyZXNzT2ZMYXN0U2VlblN0cnVjdHVyZSgpKTsKKworICAgIGxvYWQ4KEFkZHJlc3Moc3Ry
dWN0dXJlLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgaW5kZXhpbmdUeXBlKTsK
K30KKworaW5saW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9maWxpbmdTaXRlRm9yQnl0ZWNvZGVJ
bmRleChSZWdpc3RlcklEIHN0cnVjdHVyZUFuZEluZGV4aW5nVHlwZSwgUmVnaXN0ZXJJRCBzY3Jh
dGNoLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQoreworI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxF
UikKKyAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlKHN0cnVjdHVyZUFuZEluZGV4aW5nVHlwZSwg
c2NyYXRjaCwgbV9jb2RlQmxvY2stPmdldE9yQWRkQXJyYXlQcm9maWxlKGJ5dGVjb2RlSW5kZXgp
KTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGJ5dGVjb2RlSW5kZXgpOworICAgIGVtaXRBcnJh
eVByb2ZpbGluZ1NpdGUoc3RydWN0dXJlQW5kSW5kZXhpbmdUeXBlLCBzY3JhdGNoLCAwKTsKKyNl
bmRpZgorfQorCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBcnJheVByb2ZpbGVTdG9yZVRvSG9sZVNw
ZWNpYWxDYXNlKEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlKQoreworI2lmIEVOQUJMRShWQUxV
RV9QUk9GSUxFUikgICAgCisgICAgc3RvcmU4KFRydXN0ZWRJbW0zMigxKSwgYXJyYXlQcm9maWxl
LT5hZGRyZXNzT2ZNYXlTdG9yZVRvSG9sZSgpKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGFy
cmF5UHJvZmlsZSk7CisjZW5kaWYKK30KKworc3RhdGljIGlubGluZSBib29sIGFycmF5UHJvZmls
ZVNhdyhBcnJheVByb2ZpbGUqIHByb2ZpbGUsIEluZGV4aW5nVHlwZSBjYXBhYmlsaXR5KQorewor
I2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKKyAgICByZXR1cm4gISEocHJvZmlsZS0+b2JzZXJ2
ZWRBcnJheU1vZGVzKCkgJiAoYXNBcnJheU1vZGVzKE5vbkFycmF5IHwgY2FwYWJpbGl0eSkgfCBh
c0FycmF5TW9kZXMoQXJyYXlDbGFzcyB8IGNhcGFiaWxpdHkpKSk7CisjZWxzZQorICAgIFVOVVNF
RF9QQVJBTShwcm9maWxlKTsKKyAgICBVTlVTRURfUEFSQU0oY2FwYWJpbGl0eSk7CisgICAgcmV0
dXJuIGZhbHNlOworI2VuZGlmCit9CisKK2lubGluZSBKSVRBcnJheU1vZGUgSklUOjpjaG9vc2VB
cnJheU1vZGUoQXJyYXlQcm9maWxlKiBwcm9maWxlKQoreworICAgIGlmIChhcnJheVByb2ZpbGVT
YXcocHJvZmlsZSwgQXJyYXlTdG9yYWdlU2hhcGUpKQorICAgICAgICByZXR1cm4gSklUQXJyYXlT
dG9yYWdlOworICAgIHJldHVybiBKSVRDb250aWd1b3VzOworfQorCisjaWYgVVNFKEpTVkFMVUUz
Ml82NCkKKworaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZFRhZyhpbnQgaW5kZXgsIFJlZ2lzdGVy
SUQgdGFnKQoreworICAgIFJlZ2lzdGVySUQgbWFwcGVkVGFnOworICAgIGlmIChnZXRNYXBwZWRU
YWcoaW5kZXgsIG1hcHBlZFRhZykpIHsKKyAgICAgICAgbW92ZShtYXBwZWRUYWcsIHRhZyk7Cisg
ICAgICAgIHVubWFwKHRhZyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobV9j
b2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGluZGV4KSkgeworICAgICAgICBtb3Zl
KEltbTMyKGdldENvbnN0YW50T3BlcmFuZChpbmRleCkudGFnKCkpLCB0YWcpOworICAgICAgICB1
bm1hcCh0YWcpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbG9hZDMyKHRhZ0Zvcihp
bmRleCksIHRhZyk7CisgICAgdW5tYXAodGFnKTsKK30KKworaW5saW5lIHZvaWQgSklUOjplbWl0
TG9hZFBheWxvYWQoaW50IGluZGV4LCBSZWdpc3RlcklEIHBheWxvYWQpCit7CisgICAgUmVnaXN0
ZXJJRCBtYXBwZWRQYXlsb2FkOworICAgIGlmIChnZXRNYXBwZWRQYXlsb2FkKGluZGV4LCBtYXBw
ZWRQYXlsb2FkKSkgeworICAgICAgICBtb3ZlKG1hcHBlZFBheWxvYWQsIHBheWxvYWQpOworICAg
ICAgICB1bm1hcChwYXlsb2FkKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICht
X2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW5kZXgpKSB7CisgICAgICAgIG1v
dmUoSW1tMzIoZ2V0Q29uc3RhbnRPcGVyYW5kKGluZGV4KS5wYXlsb2FkKCkpLCBwYXlsb2FkKTsK
KyAgICAgICAgdW5tYXAocGF5bG9hZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBs
b2FkMzIocGF5bG9hZEZvcihpbmRleCksIHBheWxvYWQpOworICAgIHVubWFwKHBheWxvYWQpOwor
fQorCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkKGNvbnN0IEpTVmFsdWUmIHYsIFJlZ2lzdGVy
SUQgdGFnLCBSZWdpc3RlcklEIHBheWxvYWQpCit7CisgICAgbW92ZShJbW0zMih2LnBheWxvYWQo
KSksIHBheWxvYWQpOworICAgIG1vdmUoSW1tMzIodi50YWcoKSksIHRhZyk7Cit9CisKK2lubGlu
ZSB2b2lkIEpJVDo6ZW1pdExvYWQoaW50IGluZGV4LCBSZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJ
RCBwYXlsb2FkLCBSZWdpc3RlcklEIGJhc2UpCit7CisgICAgQVNTRVJUKHRhZyAhPSBwYXlsb2Fk
KTsKKworICAgIGlmIChiYXNlID09IGNhbGxGcmFtZVJlZ2lzdGVyKSB7CisgICAgICAgIEFTU0VS
VChwYXlsb2FkICE9IGJhc2UpOworICAgICAgICBlbWl0TG9hZFBheWxvYWQoaW5kZXgsIHBheWxv
YWQpOworICAgICAgICBlbWl0TG9hZFRhZyhpbmRleCwgdGFnKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlmIChwYXlsb2FkID09IGJhc2UpIHsgLy8gYXZvaWQgc3RvbXBpbmcgYmFz
ZQorICAgICAgICBsb2FkMzIodGFnRm9yKGluZGV4LCBiYXNlKSwgdGFnKTsKKyAgICAgICAgbG9h
ZDMyKHBheWxvYWRGb3IoaW5kZXgsIGJhc2UpLCBwYXlsb2FkKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGxvYWQzMihwYXlsb2FkRm9yKGluZGV4LCBiYXNlKSwgcGF5bG9hZCk7Cisg
ICAgbG9hZDMyKHRhZ0ZvcihpbmRleCwgYmFzZSksIHRhZyk7Cit9CisKK2lubGluZSB2b2lkIEpJ
VDo6ZW1pdExvYWQyKGludCBpbmRleDEsIFJlZ2lzdGVySUQgdGFnMSwgUmVnaXN0ZXJJRCBwYXls
b2FkMSwgaW50IGluZGV4MiwgUmVnaXN0ZXJJRCB0YWcyLCBSZWdpc3RlcklEIHBheWxvYWQyKQor
eworICAgIGlmIChpc01hcHBlZChpbmRleDEpKSB7CisgICAgICAgIGVtaXRMb2FkKGluZGV4MSwg
dGFnMSwgcGF5bG9hZDEpOworICAgICAgICBlbWl0TG9hZChpbmRleDIsIHRhZzIsIHBheWxvYWQy
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBlbWl0TG9hZChpbmRleDIsIHRhZzIsIHBh
eWxvYWQyKTsKKyAgICBlbWl0TG9hZChpbmRleDEsIHRhZzEsIHBheWxvYWQxKTsKK30KKworaW5s
aW5lIHZvaWQgSklUOjplbWl0TG9hZERvdWJsZShpbnQgaW5kZXgsIEZQUmVnaXN0ZXJJRCB2YWx1
ZSkKK3sKKyAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGluZGV4
KSkgeworICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGluQ29uc3RhbnRQb29sID0gbV9j
b2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIoaW5kZXgpOworICAgICAgICBsb2FkRG91YmxlKCZp
bkNvbnN0YW50UG9vbCwgdmFsdWUpOworICAgIH0gZWxzZQorICAgICAgICBsb2FkRG91YmxlKGFk
ZHJlc3NGb3IoaW5kZXgpLCB2YWx1ZSk7Cit9CisKK2lubGluZSB2b2lkIEpJVDo6ZW1pdExvYWRJ
bnQzMlRvRG91YmxlKGludCBpbmRleCwgRlBSZWdpc3RlcklEIHZhbHVlKQoreworICAgIGlmICht
X2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW5kZXgpKSB7CisgICAgICAgIFdy
aXRlQmFycmllcjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wgPSBtX2NvZGVCbG9jay0+Y29uc3Rh
bnRSZWdpc3RlcihpbmRleCk7CisgICAgICAgIGNoYXIqIGJ5dGVQb2ludGVyID0gcmVpbnRlcnBy
ZXRfY2FzdDxjaGFyKj4oJmluQ29uc3RhbnRQb29sKTsKKyAgICAgICAgY29udmVydEludDMyVG9E
b3VibGUoQWJzb2x1dGVBZGRyZXNzKGJ5dGVQb2ludGVyICsgT0JKRUNUX09GRlNFVE9GKEpTVmFs
dWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgdmFsdWUpOworICAgIH0gZWxzZQorICAgICAgICBjb252
ZXJ0SW50MzJUb0RvdWJsZShwYXlsb2FkRm9yKGluZGV4KSwgdmFsdWUpOworfQorCitpbmxpbmUg
dm9pZCBKSVQ6OmVtaXRTdG9yZShpbnQgaW5kZXgsIFJlZ2lzdGVySUQgdGFnLCBSZWdpc3RlcklE
IHBheWxvYWQsIFJlZ2lzdGVySUQgYmFzZSkKK3sKKyAgICBzdG9yZTMyKHBheWxvYWQsIHBheWxv
YWRGb3IoaW5kZXgsIGJhc2UpKTsKKyAgICBzdG9yZTMyKHRhZywgdGFnRm9yKGluZGV4LCBiYXNl
KSk7Cit9CisKK2lubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlSW50MzIoaW50IGluZGV4LCBSZWdp
c3RlcklEIHBheWxvYWQsIGJvb2wgaW5kZXhJc0ludDMyKQoreworICAgIHN0b3JlMzIocGF5bG9h
ZCwgcGF5bG9hZEZvcihpbmRleCwgY2FsbEZyYW1lUmVnaXN0ZXIpKTsKKyAgICBpZiAoIWluZGV4
SXNJbnQzMikKKyAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcp
LCB0YWdGb3IoaW5kZXgsIGNhbGxGcmFtZVJlZ2lzdGVyKSk7Cit9CisKK2lubGluZSB2b2lkIEpJ
VDo6ZW1pdFN0b3JlQW5kTWFwSW50MzIoaW50IGluZGV4LCBSZWdpc3RlcklEIHRhZywgUmVnaXN0
ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXNJbnQzMiwgc2l6ZV90IG9wY29kZUxlbmd0aCkKK3sK
KyAgICBlbWl0U3RvcmVJbnQzMihpbmRleCwgcGF5bG9hZCwgaW5kZXhJc0ludDMyKTsKKyAgICBt
YXAobV9ieXRlY29kZU9mZnNldCArIG9wY29kZUxlbmd0aCwgaW5kZXgsIHRhZywgcGF5bG9hZCk7
Cit9CisKK2lubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlSW50MzIoaW50IGluZGV4LCBUcnVzdGVk
SW1tMzIgcGF5bG9hZCwgYm9vbCBpbmRleElzSW50MzIpCit7CisgICAgc3RvcmUzMihwYXlsb2Fk
LCBwYXlsb2FkRm9yKGluZGV4LCBjYWxsRnJhbWVSZWdpc3RlcikpOworICAgIGlmICghaW5kZXhJ
c0ludDMyKQorICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyks
IHRhZ0ZvcihpbmRleCwgY2FsbEZyYW1lUmVnaXN0ZXIpKTsKK30KKworaW5saW5lIHZvaWQgSklU
OjplbWl0U3RvcmVDZWxsKGludCBpbmRleCwgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4
SXNDZWxsKQoreworICAgIHN0b3JlMzIocGF5bG9hZCwgcGF5bG9hZEZvcihpbmRleCwgY2FsbEZy
YW1lUmVnaXN0ZXIpKTsKKyAgICBpZiAoIWluZGV4SXNDZWxsKQorICAgICAgICBzdG9yZTMyKFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgdGFnRm9yKGluZGV4LCBjYWxsRnJhbWVSZWdp
c3RlcikpOworfQorCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZUJvb2woaW50IGluZGV4LCBS
ZWdpc3RlcklEIHBheWxvYWQsIGJvb2wgaW5kZXhJc0Jvb2wpCit7CisgICAgc3RvcmUzMihwYXls
b2FkLCBwYXlsb2FkRm9yKGluZGV4LCBjYWxsRnJhbWVSZWdpc3RlcikpOworICAgIGlmICghaW5k
ZXhJc0Jvb2wpCisgICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJvb2xlYW5U
YWcpLCB0YWdGb3IoaW5kZXgsIGNhbGxGcmFtZVJlZ2lzdGVyKSk7Cit9CisKK2lubGluZSB2b2lk
IEpJVDo6ZW1pdFN0b3JlRG91YmxlKGludCBpbmRleCwgRlBSZWdpc3RlcklEIHZhbHVlKQorewor
ICAgIHN0b3JlRG91YmxlKHZhbHVlLCBhZGRyZXNzRm9yKGluZGV4KSk7Cit9CisKK2lubGluZSB2
b2lkIEpJVDo6ZW1pdFN0b3JlKGludCBpbmRleCwgY29uc3QgSlNWYWx1ZSBjb25zdGFudCwgUmVn
aXN0ZXJJRCBiYXNlKQoreworICAgIHN0b3JlMzIoSW1tMzIoY29uc3RhbnQucGF5bG9hZCgpKSwg
cGF5bG9hZEZvcihpbmRleCwgYmFzZSkpOworICAgIHN0b3JlMzIoSW1tMzIoY29uc3RhbnQudGFn
KCkpLCB0YWdGb3IoaW5kZXgsIGJhc2UpKTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6
ZW1pdEluaXRSZWdpc3Rlcih1bnNpZ25lZCBkc3QpCit7CisgICAgZW1pdFN0b3JlKGRzdCwganNV
bmRlZmluZWQoKSk7Cit9CisKK2lubGluZSBib29sIEpJVDo6aXNMYWJlbGVkKHVuc2lnbmVkIGJ5
dGVjb2RlT2Zmc2V0KQoreworICAgIGZvciAoc2l6ZV90IG51bWJlck9mSnVtcFRhcmdldHMgPSBt
X2NvZGVCbG9jay0+bnVtYmVyT2ZKdW1wVGFyZ2V0cygpOyBtX2p1bXBUYXJnZXRJbmRleCAhPSBu
dW1iZXJPZkp1bXBUYXJnZXRzOyArK21fanVtcFRhcmdldEluZGV4KSB7CisgICAgICAgIHVuc2ln
bmVkIGp1bXBUYXJnZXQgPSBtX2NvZGVCbG9jay0+anVtcFRhcmdldChtX2p1bXBUYXJnZXRJbmRl
eCk7CisgICAgICAgIGlmIChqdW1wVGFyZ2V0ID09IGJ5dGVjb2RlT2Zmc2V0KQorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChqdW1wVGFyZ2V0ID4gYnl0ZWNvZGVPZmZzZXQp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30K
KworaW5saW5lIHZvaWQgSklUOjptYXAodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIGludCB2aXJ0
dWFsUmVnaXN0ZXJJbmRleCwgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCkKK3sK
KyAgICBpZiAoaXNMYWJlbGVkKGJ5dGVjb2RlT2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgbV9tYXBwZWRCeXRlY29kZU9mZnNldCA9IGJ5dGVjb2RlT2Zmc2V0OworICAgIG1fbWFwcGVk
VmlydHVhbFJlZ2lzdGVySW5kZXggPSB2aXJ0dWFsUmVnaXN0ZXJJbmRleDsKKyAgICBtX21hcHBl
ZFRhZyA9IHRhZzsKKyAgICBtX21hcHBlZFBheWxvYWQgPSBwYXlsb2FkOworICAgIAorICAgIEFT
U0VSVCghY2FuQmVPcHRpbWl6ZWQoKSB8fCBtX21hcHBlZFBheWxvYWQgPT0gcmVnVDApOworICAg
IEFTU0VSVCghY2FuQmVPcHRpbWl6ZWQoKSB8fCBtX21hcHBlZFRhZyA9PSByZWdUMSk7Cit9CisK
K2lubGluZSB2b2lkIEpJVDo6dW5tYXAoUmVnaXN0ZXJJRCByZWdpc3RlcklEKQoreworICAgIGlm
IChtX21hcHBlZFRhZyA9PSByZWdpc3RlcklEKQorICAgICAgICBtX21hcHBlZFRhZyA9IChSZWdp
c3RlcklEKS0xOworICAgIGVsc2UgaWYgKG1fbWFwcGVkUGF5bG9hZCA9PSByZWdpc3RlcklEKQor
ICAgICAgICBtX21hcHBlZFBheWxvYWQgPSAoUmVnaXN0ZXJJRCktMTsKK30KKworaW5saW5lIHZv
aWQgSklUOjp1bm1hcCgpCit7CisgICAgbV9tYXBwZWRCeXRlY29kZU9mZnNldCA9ICh1bnNpZ25l
ZCktMTsKKyAgICBtX21hcHBlZFZpcnR1YWxSZWdpc3RlckluZGV4ID0gSlNTdGFjazo6UmV0dXJu
UEM7CisgICAgbV9tYXBwZWRUYWcgPSAoUmVnaXN0ZXJJRCktMTsKKyAgICBtX21hcHBlZFBheWxv
YWQgPSAoUmVnaXN0ZXJJRCktMTsKK30KKworaW5saW5lIGJvb2wgSklUOjppc01hcHBlZChpbnQg
dmlydHVhbFJlZ2lzdGVySW5kZXgpCit7CisgICAgaWYgKG1fbWFwcGVkQnl0ZWNvZGVPZmZzZXQg
IT0gbV9ieXRlY29kZU9mZnNldCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX21h
cHBlZFZpcnR1YWxSZWdpc3RlckluZGV4ICE9IHZpcnR1YWxSZWdpc3RlckluZGV4KQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2lubGluZSBib29sIEpJVDo6
Z2V0TWFwcGVkUGF5bG9hZChpbnQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIFJlZ2lzdGVySUQmIHBh
eWxvYWQpCit7CisgICAgaWYgKG1fbWFwcGVkQnl0ZWNvZGVPZmZzZXQgIT0gbV9ieXRlY29kZU9m
ZnNldCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX21hcHBlZFZpcnR1YWxSZWdp
c3RlckluZGV4ICE9IHZpcnR1YWxSZWdpc3RlckluZGV4KQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgaWYgKG1fbWFwcGVkUGF5bG9hZCA9PSAoUmVnaXN0ZXJJRCktMSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIHBheWxvYWQgPSBtX21hcHBlZFBheWxvYWQ7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2lubGluZSBib29sIEpJVDo6Z2V0TWFwcGVkVGFnKGludCB2aXJ0dWFsUmVnaXN0
ZXJJbmRleCwgUmVnaXN0ZXJJRCYgdGFnKQoreworICAgIGlmIChtX21hcHBlZEJ5dGVjb2RlT2Zm
c2V0ICE9IG1fYnl0ZWNvZGVPZmZzZXQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAo
bV9tYXBwZWRWaXJ0dWFsUmVnaXN0ZXJJbmRleCAhPSB2aXJ0dWFsUmVnaXN0ZXJJbmRleCkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX21hcHBlZFRhZyA9PSAoUmVnaXN0ZXJJRCkt
MSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHRhZyA9IG1fbWFwcGVkVGFnOworICAgIHJl
dHVybiB0cnVlOworfQorCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChpbnQgdmlydHVhbFJlZ2lzdGVySW5kZXgpCit7CisgICAgaWYgKCFtX2NvZGVCbG9jay0+
aXNLbm93bk5vdEltbWVkaWF0ZSh2aXJ0dWFsUmVnaXN0ZXJJbmRleCkpIHsKKyAgICAgICAgaWYg
KG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleCh2aXJ0dWFsUmVnaXN0ZXJJbmRl
eCkpCisgICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBhZGRTbG93Q2FzZShlbWl0SnVtcElmTm90SlNDZWxsKHZpcnR1YWxSZWdpc3Rlcklu
ZGV4KSk7CisgICAgfQorfQorCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChpbnQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIFJlZ2lzdGVySUQgdGFnKQoreworICAg
IGlmICghbV9jb2RlQmxvY2stPmlzS25vd25Ob3RJbW1lZGlhdGUodmlydHVhbFJlZ2lzdGVySW5k
ZXgpKSB7CisgICAgICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgo
dmlydHVhbFJlZ2lzdGVySW5kZXgpKQorICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWws
IHRhZywgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKSk7CisgICAgfQorfQorCitBTFdB
WVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudEltbWVkaWF0ZUludCh1bnNpZ25l
ZCBzcmMpCit7CisgICAgcmV0dXJuIG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRl
eChzcmMpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKK30KKworQUxXQVlT
X0lOTElORSBib29sIEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50SW1tZWRpYXRlSW50KHVuc2lnbmVk
IG9wMSwgdW5zaWduZWQgb3AyLCB1bnNpZ25lZCYgb3AsIGludDMyX3QmIGNvbnN0YW50KQorewor
ICAgIGlmIChpc09wZXJhbmRDb25zdGFudEltbWVkaWF0ZUludChvcDEpKSB7CisgICAgICAgIGNv
bnN0YW50ID0gZ2V0Q29uc3RhbnRPcGVyYW5kKG9wMSkuYXNJbnQzMigpOworICAgICAgICBvcCA9
IG9wMjsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKGlzT3BlcmFuZENv
bnN0YW50SW1tZWRpYXRlSW50KG9wMikpIHsKKyAgICAgICAgY29uc3RhbnQgPSBnZXRDb25zdGFu
dE9wZXJhbmQob3AyKS5hc0ludDMyKCk7CisgICAgICAgIG9wID0gb3AxOworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGZhbHNlOworfQorCisjZWxzZSAvLyBV
U0UoSlNWQUxVRTMyXzY0KQorCisvKiBEZXByZWNhdGVkOiBQbGVhc2UgdXNlIEpJVFN0dWJDYWxs
IGluc3RlYWQuICovCisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRKSVRTdHViQXJn
KHVuc2lnbmVkIGFyZ3VtZW50TnVtYmVyLCBSZWdpc3RlcklEIGRzdCkKK3sKKyAgICB1bnNpZ25l
ZCBhcmd1bWVudFN0YWNrT2Zmc2V0ID0gKGFyZ3VtZW50TnVtYmVyICogKHNpemVvZihKU1ZhbHVl
KSAvIHNpemVvZih2b2lkKikpKSArIEpJVFNUQUNLRlJBTUVfQVJHU19JTkRFWDsKKyAgICBwZWVr
NjQoZHN0LCBhcmd1bWVudFN0YWNrT2Zmc2V0KTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJ
VDo6a2lsbExhc3RSZXN1bHRSZWdpc3RlcigpCit7CisgICAgbV9sYXN0UmVzdWx0Qnl0ZWNvZGVS
ZWdpc3RlciA9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCk7Cit9CisKKy8vIGdldCBh
cmcgcHV0cyBhbiBhcmcgZnJvbSB0aGUgU0YgcmVnaXN0ZXIgYXJyYXkgaW50byBhIGgvdyByZWdp
c3RlcgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnQg
c3JjLCBSZWdpc3RlcklEIGRzdCkKK3sKKyAgICBBU1NFUlQobV9ieXRlY29kZU9mZnNldCAhPSAo
dW5zaWduZWQpLTEpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5n
IGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlT2Zmc2V0IGlzIHNl
dC4KKworICAgIC8vIFRPRE86IHdlIHdhbnQgdG8gcmV1c2UgdmFsdWVzIHRoYXQgYXJlIGFscmVh
ZHkgaW4gcmVnaXN0ZXJzIGlmIHdlIGNhbiAtIGFkZCBhIHJlZ2lzdGVyIGFsbG9jYXRvciEKKyAg
ICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHNyYykpIHsKKyAgICAg
ICAgSlNWYWx1ZSB2YWx1ZSA9IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOworICAgICAg
ICBpZiAoIXZhbHVlLmlzTnVtYmVyKCkpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChK
U1ZhbHVlOjplbmNvZGUodmFsdWUpKSwgZHN0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
bW92ZShJbW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUpKSwgZHN0KTsKKyAgICAgICAga2lsbExh
c3RSZXN1bHRSZWdpc3RlcigpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHNy
YyA9PSBtX2xhc3RSZXN1bHRCeXRlY29kZVJlZ2lzdGVyICYmIG1fY29kZUJsb2NrLT5pc1RlbXBv
cmFyeVJlZ2lzdGVySW5kZXgoc3JjKSAmJiAhYXRKdW1wVGFyZ2V0KCkpIHsKKyAgICAgICAgLy8g
VGhlIGFyZ3VtZW50IHdlIHdhbnQgaXMgYWxyZWFkeSBzdG9yZWQgaW4gZWF4CisgICAgICAgIGlm
IChkc3QgIT0gY2FjaGVkUmVzdWx0UmVnaXN0ZXIpCisgICAgICAgICAgICBtb3ZlKGNhY2hlZFJl
c3VsdFJlZ2lzdGVyLCBkc3QpOworICAgICAgICBraWxsTGFzdFJlc3VsdFJlZ2lzdGVyKCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBsb2FkNjQoQWRkcmVzcyhjYWxsRnJhbWVSZWdp
c3Rlciwgc3JjICogc2l6ZW9mKFJlZ2lzdGVyKSksIGRzdCk7CisgICAga2lsbExhc3RSZXN1bHRS
ZWdpc3RlcigpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJl
Z2lzdGVycyhpbnQgc3JjMSwgUmVnaXN0ZXJJRCBkc3QxLCBpbnQgc3JjMiwgUmVnaXN0ZXJJRCBk
c3QyKQoreworICAgIGlmIChzcmMyID09IG1fbGFzdFJlc3VsdEJ5dGVjb2RlUmVnaXN0ZXIpIHsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMyLCBkc3QyKTsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCBkc3QxKTsKKyAgICB9IGVsc2UgeworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEsIGRzdDEpOworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNyYzIsIGRzdDIpOworICAgIH0KK30KKworQUxXQVlTX0lOTElORSBpbnQzMl90
IEpJVDo6Z2V0Q29uc3RhbnRPcGVyYW5kSW1tZWRpYXRlSW50KHVuc2lnbmVkIHNyYykKK3sKKyAg
ICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNJbnQzMigpOworfQorCitBTFdBWVNf
SU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudEltbWVkaWF0ZUludCh1bnNpZ25lZCBz
cmMpCit7CisgICAgcmV0dXJuIG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChz
cmMpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKK30KKworQUxXQVlTX0lO
TElORSB2b2lkIEpJVDo6ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcih1bnNpZ25lZCBkc3QsIFJlZ2lz
dGVySUQgZnJvbSkKK3sKKyAgICBzdG9yZTY0KGZyb20sIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0
ZXIsIGRzdCAqIHNpemVvZihSZWdpc3RlcikpKTsKKyAgICBtX2xhc3RSZXN1bHRCeXRlY29kZVJl
Z2lzdGVyID0gKGZyb20gPT0gY2FjaGVkUmVzdWx0UmVnaXN0ZXIpID8gc3RhdGljX2Nhc3Q8aW50
Pihkc3QpIDogc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKTsKK30KKworQUxXQVlTX0lO
TElORSB2b2lkIEpJVDo6ZW1pdEluaXRSZWdpc3Rlcih1bnNpZ25lZCBkc3QpCit7CisgICAgc3Rv
cmU2NChUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSwgQWRkcmVz
cyhjYWxsRnJhbWVSZWdpc3RlciwgZHN0ICogc2l6ZW9mKFJlZ2lzdGVyKSkpOworfQorCitBTFdB
WVNfSU5MSU5FIEpJVDo6SnVtcCBKSVQ6OmVtaXRKdW1wSWZKU0NlbGwoUmVnaXN0ZXJJRCByZWcp
Cit7CisgICAgcmV0dXJuIGJyYW5jaFRlc3Q2NChaZXJvLCByZWcsIHRhZ01hc2tSZWdpc3Rlcik7
Cit9CisKK0FMV0FZU19JTkxJTkUgSklUOjpKdW1wIEpJVDo6ZW1pdEp1bXBJZkJvdGhKU0NlbGxz
KFJlZ2lzdGVySUQgcmVnMSwgUmVnaXN0ZXJJRCByZWcyLCBSZWdpc3RlcklEIHNjcmF0Y2gpCit7
CisgICAgbW92ZShyZWcxLCBzY3JhdGNoKTsKKyAgICBvcjY0KHJlZzIsIHNjcmF0Y2gpOworICAg
IHJldHVybiBlbWl0SnVtcElmSlNDZWxsKHNjcmF0Y2gpOworfQorCitBTFdBWVNfSU5MSU5FIHZv
aWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZKU0NlbGwoUmVnaXN0ZXJJRCByZWcpCit7CisgICAg
YWRkU2xvd0Nhc2UoZW1pdEp1bXBJZkpTQ2VsbChyZWcpKTsKK30KKworQUxXQVlTX0lOTElORSBK
SVQ6Okp1bXAgSklUOjplbWl0SnVtcElmTm90SlNDZWxsKFJlZ2lzdGVySUQgcmVnKQoreworICAg
IHJldHVybiBicmFuY2hUZXN0NjQoTm9uWmVybywgcmVnLCB0YWdNYXNrUmVnaXN0ZXIpOworfQor
CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoUmVn
aXN0ZXJJRCByZWcpCit7CisgICAgYWRkU2xvd0Nhc2UoZW1pdEp1bXBJZk5vdEpTQ2VsbChyZWcp
KTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKFJlZ2lzdGVySUQgcmVnLCBpbnQgdlJlZykKK3sKKyAgICBpZiAoIW1fY29kZUJsb2NrLT5p
c0tub3duTm90SW1tZWRpYXRlKHZSZWcpKQorICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwocmVnKTsKK30KKworaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZERvdWJsZShpbnQgaW5k
ZXgsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKK3sKKyAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3Rh
bnRSZWdpc3RlckluZGV4KGluZGV4KSkgeworICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4m
IGluQ29uc3RhbnRQb29sID0gbV9jb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIoaW5kZXgpOwor
ICAgICAgICBsb2FkRG91YmxlKCZpbkNvbnN0YW50UG9vbCwgdmFsdWUpOworICAgIH0gZWxzZQor
ICAgICAgICBsb2FkRG91YmxlKGFkZHJlc3NGb3IoaW5kZXgpLCB2YWx1ZSk7Cit9CisKK2lubGlu
ZSB2b2lkIEpJVDo6ZW1pdExvYWRJbnQzMlRvRG91YmxlKGludCBpbmRleCwgRlBSZWdpc3RlcklE
IHZhbHVlKQoreworICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgo
aW5kZXgpKSB7CisgICAgICAgIEFTU0VSVChpc09wZXJhbmRDb25zdGFudEltbWVkaWF0ZUludChp
bmRleCkpOworICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShJbW0zMihnZXRDb25zdGFudE9w
ZXJhbmQoaW5kZXgpLmFzSW50MzIoKSksIHZhbHVlKTsKKyAgICB9IGVsc2UKKyAgICAgICAgY29u
dmVydEludDMyVG9Eb3VibGUoYWRkcmVzc0ZvcihpbmRleCksIHZhbHVlKTsKK30KKworQUxXQVlT
X0lOTElORSBKSVQ6Okp1bXAgSklUOjplbWl0SnVtcElmSW1tZWRpYXRlSW50ZWdlcihSZWdpc3Rl
cklEIHJlZykKK3sKKyAgICByZXR1cm4gYnJhbmNoNjQoQWJvdmVPckVxdWFsLCByZWcsIHRhZ1R5
cGVOdW1iZXJSZWdpc3Rlcik7Cit9CisKK0FMV0FZU19JTkxJTkUgSklUOjpKdW1wIEpJVDo6ZW1p
dEp1bXBJZk5vdEltbWVkaWF0ZUludGVnZXIoUmVnaXN0ZXJJRCByZWcpCit7CisgICAgcmV0dXJu
IGJyYW5jaDY0KEJlbG93LCByZWcsIHRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7Cit9CisKK0FMV0FZ
U19JTkxJTkUgSklUOjpKdW1wIEpJVDo6ZW1pdEp1bXBJZk5vdEltbWVkaWF0ZUludGVnZXJzKFJl
Z2lzdGVySUQgcmVnMSwgUmVnaXN0ZXJJRCByZWcyLCBSZWdpc3RlcklEIHNjcmF0Y2gpCit7Cisg
ICAgbW92ZShyZWcxLCBzY3JhdGNoKTsKKyAgICBhbmQ2NChyZWcyLCBzY3JhdGNoKTsKKyAgICBy
ZXR1cm4gZW1pdEp1bXBJZk5vdEltbWVkaWF0ZUludGVnZXIoc2NyYXRjaCk7Cit9CisKK0FMV0FZ
U19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbWVkaWF0ZUludGVnZXIo
UmVnaXN0ZXJJRCByZWcpCit7CisgICAgYWRkU2xvd0Nhc2UoZW1pdEp1bXBJZk5vdEltbWVkaWF0
ZUludGVnZXIocmVnKSk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEltbWVkaWF0ZUludGVnZXJzKFJlZ2lzdGVySUQgcmVnMSwgUmVnaXN0ZXJJRCBy
ZWcyLCBSZWdpc3RlcklEIHNjcmF0Y2gpCit7CisgICAgYWRkU2xvd0Nhc2UoZW1pdEp1bXBJZk5v
dEltbWVkaWF0ZUludGVnZXJzKHJlZzEsIHJlZzIsIHNjcmF0Y2gpKTsKK30KKworQUxXQVlTX0lO
TElORSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tZWRpYXRlTnVtYmVyKFJlZ2lz
dGVySUQgcmVnKQoreworICAgIGFkZFNsb3dDYXNlKGVtaXRKdW1wSWZOb3RJbW1lZGlhdGVOdW1i
ZXIocmVnKSk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRGYXN0QXJpdGhSZVRh
Z0ltbWVkaWF0ZShSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQoreworICAgIGVtaXRG
YXN0QXJpdGhJbnRUb0ltbU5vQ2hlY2soc3JjLCBkZXN0KTsKK30KKworLy8gb3BlcmFuZCBpcyBp
bnQzMl90LCBtdXN0IGhhdmUgYmVlbiB6ZXJvLWV4dGVuZGVkIGlmIHJlZ2lzdGVyIGlzIDY0LWJp
dC4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRGYXN0QXJpdGhJbnRUb0ltbU5vQ2hlY2so
UmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKK3sKKyAgICBpZiAoc3JjICE9IGRlc3Qp
CisgICAgICAgIG1vdmUoc3JjLCBkZXN0KTsKKyAgICBvcjY0KHRhZ1R5cGVOdW1iZXJSZWdpc3Rl
ciwgZGVzdCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRUYWdBc0Jvb2xJbW1l
ZGlhdGUoUmVnaXN0ZXJJRCByZWcpCit7CisgICAgb3IzMihUcnVzdGVkSW1tMzIoc3RhdGljX2Nh
c3Q8aW50MzJfdD4oVmFsdWVGYWxzZSkpLCByZWcpOworfQorCisjZW5kaWYgLy8gVVNFKEpTVkFM
VUUzMl82NCkKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQor
CisjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCShyZXZp
c2lvbiAxMzMzODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAko
d29ya2luZyBjb3B5KQpAQCAtMjMsOCArMjMsOCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAot
I2lmbmRlZiBKSVRJbmxpbmVNZXRob2RzX2gKLSNkZWZpbmUgSklUSW5saW5lTWV0aG9kc19oCisj
aWZuZGVmIEpJVElubGluZXNfaAorI2RlZmluZSBKSVRJbmxpbmVzX2gKIAogCiAjaWYgRU5BQkxF
KEpJVCkKQEAgLTk5OCw0ICs5OTgsNCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0VGFn
QXNCb29sSW1tCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQogCi0jZW5kaWYKKyNlbmRpZiAvLyBK
SVRJbmxpbmVzX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMy
XzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29k
ZXMzMl82NC5jcHAJKHJldmlzaW9uIDEzMzM5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3Bjb2RlczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAog
I2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAjaW5jbHVkZSAiSklULmgiCiAKLSNpbmNsdWRlICJKSVRJ
bmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiSklUSW5saW5lcy5oIgogI2luY2x1ZGUgIkpJVFN0
dWJDYWxsLmgiCiAjaW5jbHVkZSAiSlNBcnJheS5oIgogI2luY2x1ZGUgIkpTQ2VsbC5oIgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAxMzMz
OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yOSw5ICsyOSw5IEBACiAjaW5jbHVkZSAiSklULmgiCiAKICNpbmNsdWRlICJB
cmd1bWVudHMuaCIKLSNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaCIKKyNpbmNs
dWRlICJDb3BpZWRTcGFjZUlubGluZXMuaCIKICNpbmNsdWRlICJIZWFwLmgiCi0jaW5jbHVkZSAi
SklUSW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkpJVElubGluZXMuaCIKICNpbmNsdWRlICJK
SVRTdHViQ2FsbC5oIgogI2luY2x1ZGUgIkpTQXJyYXkuaCIKICNpbmNsdWRlICJKU0NlbGwuaCIK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFj
Y2VzczMyXzY0LmNwcAkocmV2aXNpb24gMTMzMzkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyAr
MzIsNyBAQAogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkdDQXdhcmVKSVRTdHVi
Um91dGluZS5oIgogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCi0jaW5jbHVkZSAiSklUSW5saW5l
TWV0aG9kcy5oIgorI2luY2x1ZGUgIkpJVElubGluZXMuaCIKICNpbmNsdWRlICJKSVRTdHViQ2Fs
bC5oIgogI2luY2x1ZGUgIkpTQXJyYXkuaCIKICNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAko
cmV2aXNpb24gMTMzMzkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0
eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlICJH
Q0F3YXJlSklUU3R1YlJvdXRpbmUuaCIKICNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKICNpbmNs
dWRlICJJbnRlcnByZXRlci5oIgotI2luY2x1ZGUgIkpJVElubGluZU1ldGhvZHMuaCIKKyNpbmNs
dWRlICJKSVRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSklUU3R1YkNhbGwuaCIKICNpbmNsdWRlICJK
U0FycmF5LmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQXJyYXlDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDEz
MzM5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5Q29uc3RydWN0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw4ICsyNSw4IEBACiAjaW5jbHVkZSAiQXJyYXlDb25z
dHJ1Y3Rvci5oIgogCiAjaW5jbHVkZSAiQXJyYXlQcm90b3R5cGUuaCIKLSNpbmNsdWRlICJCdXR0
ZXJmbHlJbmxpbmVNZXRob2RzLmgiCi0jaW5jbHVkZSAiQ29waWVkU3BhY2VJbmxpbmVNZXRob2Rz
LmgiCisjaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lcy5oIgorI2luY2x1ZGUgIkNvcGllZFNwYWNl
SW5saW5lcy5oIgogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uSGVscGVy
cy5oIgogI2luY2x1ZGUgIkpTQXJyYXkuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDEzMzM5MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjQsMTAgKzI0LDEwIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
QXJyYXlQcm90b3R5cGUuaCIKIAotI2luY2x1ZGUgIkJ1dHRlcmZseUlubGluZU1ldGhvZHMuaCIK
KyNpbmNsdWRlICJCdXR0ZXJmbHlJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ2FjaGVkQ2FsbC5oIgog
I2luY2x1ZGUgIkNvZGVCbG9jay5oIgotI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lTWV0aG9k
cy5oIgorI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lcy5oIgogI2luY2x1ZGUgIkludGVycHJl
dGVyLmgiCiAjaW5jbHVkZSAiSklULmgiCiAjaW5jbHVkZSAiSlNTdHJpbmdCdWlsZGVyLmgiCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVNZXRob2Rz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5
SW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAxMzMzOTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
MTc5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8K
LQotI2lmbmRlZiBCdXR0ZXJmbHlJbmxpbmVNZXRob2RzX2gKLSNkZWZpbmUgQnV0dGVyZmx5SW5s
aW5lTWV0aG9kc19oCi0KLSNpbmNsdWRlICJBcnJheVN0b3JhZ2UuaCIKLSNpbmNsdWRlICJCdXR0
ZXJmbHkuaCIKLSNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaCIKLSNpbmNsdWRl
ICJDb3B5VmlzaXRvci5oIgotI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgotI2luY2x1ZGUgIlN0
cnVjdHVyZS5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotaW5saW5lIEJ1dHRlcmZseSogQnV0dGVy
Zmx5OjpjcmVhdGVVbmluaXRpYWxpemVkKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90
IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRleGluZ0hl
YWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQotewotICAgIHZvaWQqIHRl
bXA7Ci0gICAgc2l6ZV90IHNpemUgPSB0b3RhbFNpemUocHJlQ2FwYWNpdHksIHByb3BlcnR5Q2Fw
YWNpdHksIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Ci0g
ICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKHNpemUsICZ0ZW1wKSkK
LSAgICAgICAgQ1JBU0goKTsKLSAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IGZyb21CYXNlKHRlbXAs
IHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5KTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQot
Ci1pbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wg
aGFzSW5kZXhpbmdIZWFkZXIsIGNvbnN0IEluZGV4aW5nSGVhZGVyJiBpbmRleGluZ0hlYWRlciwg
c2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQotewotICAgIEJ1dHRlcmZseSogcmVz
dWx0ID0gY3JlYXRlVW5pbml0aWFsaXplZCgKLSAgICAgICAgZ2xvYmFsRGF0YSwgcHJlQ2FwYWNp
dHksIHByb3BlcnR5Q2FwYWNpdHksIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRT
aXplSW5CeXRlcyk7Ci0gICAgaWYgKGhhc0luZGV4aW5nSGVhZGVyKQotICAgICAgICAqcmVzdWx0
LT5pbmRleGluZ0hlYWRlcigpID0gaW5kZXhpbmdIZWFkZXI7Ci0gICAgcmV0dXJuIHJlc3VsdDsK
LX0KLQotaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGUoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLXsKLSAgICByZXR1cm4gY3JlYXRlKGds
b2JhbERhdGEsIDAsIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgaGFzSW5kZXhpbmdI
ZWFkZXIoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSksIEluZGV4aW5nSGVhZGVyKCksIDApOwot
fQotCi1pbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWREdXJp
bmdDb2xsZWN0aW9uKENvcHlWaXNpdG9yJiB2aXNpdG9yLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNp
emVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5k
ZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCi17Ci0gICAgQnV0dGVyZmx5KiByZXN1bHQgPSBmcm9t
QmFzZSgKLSAgICAgICAgdmlzaXRvci5hbGxvY2F0ZU5ld1NwYWNlKHRvdGFsU2l6ZShwcmVDYXBh
Y2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9h
ZFNpemVJbkJ5dGVzKSksCi0gICAgICAgIHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5KTsK
LSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1pbmxpbmUgdm9pZCogQnV0dGVyZmx5OjpiYXNlKFN0
cnVjdHVyZSogc3RydWN0dXJlKQotewotICAgIHJldHVybiBiYXNlKGluZGV4aW5nSGVhZGVyKCkt
PnByZUNhcGFjaXR5KHN0cnVjdHVyZSksIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7
Ci19Ci0KLWlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Z3Jvd1Byb3BlcnR5U3RvcmFnZShK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IG9sZFBy
b3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBpbmRleGluZ1Bh
eWxvYWRTaXplSW5CeXRlcywgc2l6ZV90IG5ld1Byb3BlcnR5Q2FwYWNpdHkpCi17Ci0gICAgQVNT
RVJUKG5ld1Byb3BlcnR5Q2FwYWNpdHkgPiBvbGRQcm9wZXJ0eUNhcGFjaXR5KTsKLSAgICBCdXR0
ZXJmbHkqIHJlc3VsdCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQoCi0gICAgICAgIGdsb2JhbERhdGEs
IHByZUNhcGFjaXR5LCBuZXdQcm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hlYWRlciwgaW5k
ZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwotICAgIG1lbWNweSgKLSAgICAgICAgcmVzdWx0LT5w
cm9wZXJ0eVN0b3JhZ2UoKSAtIG9sZFByb3BlcnR5Q2FwYWNpdHksCi0gICAgICAgIHByb3BlcnR5
U3RvcmFnZSgpIC0gb2xkUHJvcGVydHlDYXBhY2l0eSwKLSAgICAgICAgdG90YWxTaXplKDAsIG9s
ZFByb3BlcnR5Q2FwYWNpdHksIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRTaXpl
SW5CeXRlcykpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWlubGluZSBCdXR0ZXJmbHkqIEJ1
dHRlcmZseTo6Z3Jvd1Byb3BlcnR5U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3Qgb2xkUHJvcGVydHlDYXBhY2l0eSwgc2l6ZV90IG5l
d1Byb3BlcnR5Q2FwYWNpdHkpCi17Ci0gICAgcmV0dXJuIGdyb3dQcm9wZXJ0eVN0b3JhZ2UoCi0g
ICAgICAgIGdsb2JhbERhdGEsIGluZGV4aW5nSGVhZGVyKCktPnByZUNhcGFjaXR5KHN0cnVjdHVy
ZSksIG9sZFByb3BlcnR5Q2FwYWNpdHksCi0gICAgICAgIGhhc0luZGV4aW5nSGVhZGVyKHN0cnVj
dHVyZS0+aW5kZXhpbmdUeXBlKCkpLAotICAgICAgICBpbmRleGluZ0hlYWRlcigpLT5pbmRleGlu
Z1BheWxvYWRTaXplSW5CeXRlcyhzdHJ1Y3R1cmUpLCBuZXdQcm9wZXJ0eUNhcGFjaXR5KTsKLX0K
LQotaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojpncm93UHJvcGVydHlTdG9yYWdlKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIHNpemVfdCBuZXdQ
cm9wZXJ0eUNhcGFjaXR5KQotewotICAgIHJldHVybiBncm93UHJvcGVydHlTdG9yYWdlKAotICAg
ICAgICBnbG9iYWxEYXRhLCBvbGRTdHJ1Y3R1cmUsIG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKSwgbmV3UHJvcGVydHlDYXBhY2l0eSk7Ci19Ci0KLWlubGluZSBCdXR0ZXJmbHkqIEJ1
dHRlcmZseTo6Z3Jvd0FycmF5UmlnaHQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1
cmUqIG9sZFN0cnVjdHVyZSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFkSW5kZXhp
bmdIZWFkZXIsIHNpemVfdCBvbGRJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcywgc2l6ZV90IG5l
d0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQotewotICAgIEFTU0VSVF9VTlVTRUQob2xkU3Ry
dWN0dXJlLCAhaW5kZXhpbmdIZWFkZXIoKS0+cHJlQ2FwYWNpdHkob2xkU3RydWN0dXJlKSk7Ci0g
ICAgQVNTRVJUX1VOVVNFRChvbGRTdHJ1Y3R1cmUsIGhhZEluZGV4aW5nSGVhZGVyID09IGhhc0lu
ZGV4aW5nSGVhZGVyKG9sZFN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKTsKLSAgICB2b2lkKiB0
aGVCYXNlID0gYmFzZSgwLCBwcm9wZXJ0eUNhcGFjaXR5KTsKLSAgICBzaXplX3Qgb2xkU2l6ZSA9
IHRvdGFsU2l6ZSgwLCBwcm9wZXJ0eUNhcGFjaXR5LCBoYWRJbmRleGluZ0hlYWRlciwgb2xkSW5k
ZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwotICAgIHNpemVfdCBuZXdTaXplID0gdG90YWxTaXpl
KDAsIHByb3BlcnR5Q2FwYWNpdHksIHRydWUsIG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVz
KTsKLSAgICBpZiAoIWdsb2JhbERhdGEuaGVhcC50cnlSZWFsbG9jYXRlU3RvcmFnZSgmdGhlQmFz
ZSwgb2xkU2l6ZSwgbmV3U2l6ZSkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBmcm9t
QmFzZSh0aGVCYXNlLCAwLCBwcm9wZXJ0eUNhcGFjaXR5KTsKLX0KLQotaW5saW5lIEJ1dHRlcmZs
eSogQnV0dGVyZmx5Ojpncm93QXJyYXlSaWdodChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0
cnVjdHVyZSogb2xkU3RydWN0dXJlLCBzaXplX3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0
ZXMpCi17Ci0gICAgcmV0dXJuIGdyb3dBcnJheVJpZ2h0KAotICAgICAgICBnbG9iYWxEYXRhLCBv
bGRTdHJ1Y3R1cmUsIG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwKLSAgICAgICAg
aGFzSW5kZXhpbmdIZWFkZXIob2xkU3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSksCi0gICAgICAg
IGluZGV4aW5nSGVhZGVyKCktPmluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKG9sZFN0cnVjdHVy
ZSksIG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKLX0KLQotaW5saW5lIEJ1dHRlcmZs
eSogQnV0dGVyZmx5OjpyZXNpemVBcnJheShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNpemVf
dCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIG9sZEhhc0luZGV4aW5nSGVhZGVyLCBzaXplX3Qgb2xk
SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdQcmVDYXBhY2l0eSwgYm9vbCBu
ZXdIYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVz
KQotewotICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gY3JlYXRlVW5pbml0aWFsaXplZCgKLSAgICAg
ICAgZ2xvYmFsRGF0YSwgbmV3UHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHksIG5ld0hhc0lu
ZGV4aW5nSGVhZGVyLCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Ci0gICAgLy8gRklY
TUU6IFRoaXMgY291bGQgYmUgbWFkZSBtdWNoIG1vcmUgZWZmaWNpZW50IGlmIHdlIHVzZWQgdGhl
IHByb3BlcnR5IHNpemUsCi0gICAgLy8gbm90IHRoZSBjYXBhY2l0eS4KLSAgICB2b2lkKiB0byA9
IHJlc3VsdC0+cHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eUNhcGFjaXR5OwotICAgIHZvaWQq
IGZyb20gPSBwcm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5Q2FwYWNpdHk7Ci0gICAgc2l6ZV90
IHNpemUgPSBzdGQ6Om1pbigKLSAgICAgICAgdG90YWxTaXplKDAsIHByb3BlcnR5Q2FwYWNpdHks
IG9sZEhhc0luZGV4aW5nSGVhZGVyLCBvbGRJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyksCi0g
ICAgICAgIHRvdGFsU2l6ZSgwLCBwcm9wZXJ0eUNhcGFjaXR5LCBuZXdIYXNJbmRleGluZ0hlYWRl
ciwgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpKTsKLSAgICBtZW1jcHkodG8sIGZyb20s
IHNpemUpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWlubGluZSBCdXR0ZXJmbHkqIEJ1dHRl
cmZseTo6cmVzaXplQXJyYXkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgc2l6ZV90IG5ld1ByZUNhcGFjaXR5LCBzaXplX3QgbmV3SW5kZXhpbmdQYXlsb2Fk
U2l6ZUluQnl0ZXMpCi17Ci0gICAgYm9vbCBoYXNJbmRleGluZ0hlYWRlciA9IEpTQzo6aGFzSW5k
ZXhpbmdIZWFkZXIoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSk7Ci0gICAgcmV0dXJuIHJlc2l6
ZUFycmF5KAotICAgICAgICBnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5
KCksIGhhc0luZGV4aW5nSGVhZGVyLAotICAgICAgICBpbmRleGluZ0hlYWRlcigpLT5pbmRleGlu
Z1BheWxvYWRTaXplSW5CeXRlcyhzdHJ1Y3R1cmUpLCBuZXdQcmVDYXBhY2l0eSwKLSAgICAgICAg
aGFzSW5kZXhpbmdIZWFkZXIsIG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKLX0KLQot
aW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojp1bnNoaWZ0KFN0cnVjdHVyZSogc3RydWN0dXJl
LCBzaXplX3QgbnVtYmVyT2ZTbG90cykKLXsKLSAgICBBU1NFUlQoaGFzQXJyYXlTdG9yYWdlKHN0
cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKTsKLSAgICBBU1NFUlQobnVtYmVyT2ZTbG90cyA8PSBp
bmRleGluZ0hlYWRlcigpLT5wcmVDYXBhY2l0eShzdHJ1Y3R1cmUpKTsKLSAgICB1bnNpZ25lZCBw
cm9wZXJ0eUNhcGFjaXR5ID0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpOwotICAgIC8v
IEZJWE1FOiBJdCB3b3VsZCBwcm9iYWJseSBiZSB3aXNlIHRvIHJld3JpdGUgdGhpcyBhcyBhIGxv
b3Agc2luY2UgKDEpIHdlIGtub3cgaW4gd2hpY2gKLSAgICAvLyBkaXJlY3Rpb24gd2UncmUgbW92
aW5nIG1lbW9yeSBzbyB3ZSBkb24ndCBuZWVkIHRoZSBleHRyYSBjaGVjayBvZiBtZW1tb3ZlIGFu
ZCAoMikgd2UncmUKLSAgICAvLyBtb3ZpbmcgYSBzbWFsbCBhbW91bnQgb2YgbWVtb3J5IGluIHRo
ZSBjb21tb24gY2FzZSBzbyB0aGUgdGhyb3VnaHB1dCBvZiBtZW1tb3ZlIHdvbid0Ci0gICAgLy8g
YW1vcnRpemUgdGhlIG92ZXJoZWFkIG9mIGNhbGxpbmcgaXQuIEFuZCBubywgd2UgY2Fubm90IHJl
bHkgb24gdGhlIEMrKyBjb21waWxlciB0bwotICAgIC8vIGlubGluZSBtZW1tb3ZlIChwYXJ0aWN1
bGFybHkgc2luY2UgdGhlIHNpemUgYXJndW1lbnQgaXMgbGlrZWx5IHRvIGJlIHZhcmlhYmxlKSwg
bm9yIGNhbgotICAgIC8vIHdlIHJlbHkgb24gdGhlIGNvbXBpbGVyIHRvIHJlY29nbml6ZSB0aGUg
b3JkZXJpbmcgb2YgdGhlIHBvaW50ZXIgYXJndW1lbnRzIChzaW5jZQotICAgIC8vIHByb3BlcnR5
Q2FwYWNpdHkgaXMgdmFyaWFibGUgYW5kIGNvdWxkIGNhdXNlIHdyYXAtYXJvdW5kIGFzIGZhciBh
cyB0aGUgY29tcGlsZXIga25vd3MpLgotICAgIG1lbW1vdmUoCi0gICAgICAgIHByb3BlcnR5U3Rv
cmFnZSgpIC0gbnVtYmVyT2ZTbG90cyAtIHByb3BlcnR5Q2FwYWNpdHksCi0gICAgICAgIHByb3Bl
cnR5U3RvcmFnZSgpIC0gcHJvcGVydHlDYXBhY2l0eSwKLSAgICAgICAgc2l6ZW9mKEVuY29kZWRK
U1ZhbHVlKSAqIHByb3BlcnR5Q2FwYWNpdHkgKyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpICsgQXJy
YXlTdG9yYWdlOjpzaXplRm9yKDApKTsKLSAgICByZXR1cm4gSW5kZXhpbmdIZWFkZXI6OmZyb21F
bmRPZihwcm9wZXJ0eVN0b3JhZ2UoKSAtIG51bWJlck9mU2xvdHMpLT5idXR0ZXJmbHkoKTsKLX0K
LQotaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpzaGlmdChTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgc2l6ZV90IG51bWJlck9mU2xvdHMpCi17Ci0gICAgQVNTRVJUKGhhc0FycmF5U3RvcmFnZShz
dHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSk7Ci0gICAgdW5zaWduZWQgcHJvcGVydHlDYXBhY2l0
eSA9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKLSAgICAvLyBGSVhNRTogU2VlIGNv
bW1lbnQgaW4gdW5zaGlmdCgpLCBhYm92ZS4KLSAgICBtZW1tb3ZlKAotICAgICAgICBwcm9wZXJ0
eVN0b3JhZ2UoKSAtIHByb3BlcnR5Q2FwYWNpdHkgKyBudW1iZXJPZlNsb3RzLAotICAgICAgICBw
cm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5Q2FwYWNpdHksCi0gICAgICAgIHNpemVvZihFbmNv
ZGVkSlNWYWx1ZSkgKiBwcm9wZXJ0eUNhcGFjaXR5ICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSAr
IEFycmF5U3RvcmFnZTo6c2l6ZUZvcigwKSk7Ci0gICAgcmV0dXJuIEluZGV4aW5nSGVhZGVyOjpm
cm9tRW5kT2YocHJvcGVydHlTdG9yYWdlKCkgKyBudW1iZXJPZlNsb3RzKS0+YnV0dGVyZmx5KCk7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gQnV0dGVyZmx5SW5saW5lTWV0
aG9kc19oCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0
ZXJmbHlJbmxpbmVzLmgJKHJldmlzaW9uIDEzMzM4OSkJKGZyb20gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oOjEzMzM4OSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGluZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDE3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIEJ1dHRlcmZseUlubGluZU1ldGhvZHNfaAorI2RlZmluZSBCdXR0ZXJm
bHlJbmxpbmVNZXRob2RzX2gKKworI2luY2x1ZGUgIkFycmF5U3RvcmFnZS5oIgorI2luY2x1ZGUg
IkJ1dHRlcmZseS5oIgorI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oIgorI2lu
Y2x1ZGUgIkNvcHlWaXNpdG9yLmgiCisjaW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgiCisjaW5jbHVk
ZSAiU3RydWN0dXJlLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitpbmxpbmUgQnV0dGVyZmx5KiBC
dXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBz
aXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4
aW5nSGVhZGVyLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCit7CisgICAgdm9p
ZCogdGVtcDsKKyAgICBzaXplX3Qgc2l6ZSA9IHRvdGFsU2l6ZShwcmVDYXBhY2l0eSwgcHJvcGVy
dHlDYXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVz
KTsKKyAgICBpZiAoIWdsb2JhbERhdGEuaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2Uoc2l6ZSwgJnRl
bXApKQorICAgICAgICBDUkFTSCgpOworICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gZnJvbUJhc2Uo
dGVtcCwgcHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHkpOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Y3JlYXRlKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwg
Ym9vbCBoYXNJbmRleGluZ0hlYWRlciwgY29uc3QgSW5kZXhpbmdIZWFkZXImIGluZGV4aW5nSGVh
ZGVyLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCit7CisgICAgQnV0dGVyZmx5
KiByZXN1bHQgPSBjcmVhdGVVbmluaXRpYWxpemVkKAorICAgICAgICBnbG9iYWxEYXRhLCBwcmVD
YXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5
bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBpZiAoaGFzSW5kZXhpbmdIZWFkZXIpCisgICAgICAgICpy
ZXN1bHQtPmluZGV4aW5nSGVhZGVyKCkgPSBpbmRleGluZ0hlYWRlcjsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZShKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlKQoreworICAgIHJldHVybiBjcmVh
dGUoZ2xvYmFsRGF0YSwgMCwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBoYXNJbmRl
eGluZ0hlYWRlcihzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSwgSW5kZXhpbmdIZWFkZXIoKSwg
MCk7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFsaXpl
ZER1cmluZ0NvbGxlY3Rpb24oQ29weVZpc2l0b3ImIHZpc2l0b3IsIHNpemVfdCBwcmVDYXBhY2l0
eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIsIHNpemVf
dCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKK3sKKyAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9
IGZyb21CYXNlKAorICAgICAgICB2aXNpdG9yLmFsbG9jYXRlTmV3U3BhY2UodG90YWxTaXplKHBy
ZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hlYWRlciwgaW5kZXhpbmdQ
YXlsb2FkU2l6ZUluQnl0ZXMpKSwKKyAgICAgICAgcHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNp
dHkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2lubGluZSB2b2lkKiBCdXR0ZXJmbHk6OmJh
c2UoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAgcmV0dXJuIGJhc2UoaW5kZXhpbmdIZWFk
ZXIoKS0+cHJlQ2FwYWNpdHkoc3RydWN0dXJlKSwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0
eSgpKTsKK30KKworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojpncm93UHJvcGVydHlTdG9y
YWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3Qg
b2xkUHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IGluZGV4
aW5nUGF5bG9hZFNpemVJbkJ5dGVzLCBzaXplX3QgbmV3UHJvcGVydHlDYXBhY2l0eSkKK3sKKyAg
ICBBU1NFUlQobmV3UHJvcGVydHlDYXBhY2l0eSA+IG9sZFByb3BlcnR5Q2FwYWNpdHkpOworICAg
IEJ1dHRlcmZseSogcmVzdWx0ID0gY3JlYXRlVW5pbml0aWFsaXplZCgKKyAgICAgICAgZ2xvYmFs
RGF0YSwgcHJlQ2FwYWNpdHksIG5ld1Byb3BlcnR5Q2FwYWNpdHksIGhhc0luZGV4aW5nSGVhZGVy
LCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgbWVtY3B5KAorICAgICAgICByZXN1
bHQtPnByb3BlcnR5U3RvcmFnZSgpIC0gb2xkUHJvcGVydHlDYXBhY2l0eSwKKyAgICAgICAgcHJv
cGVydHlTdG9yYWdlKCkgLSBvbGRQcm9wZXJ0eUNhcGFjaXR5LAorICAgICAgICB0b3RhbFNpemUo
MCwgb2xkUHJvcGVydHlDYXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9h
ZFNpemVJbkJ5dGVzKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5lIEJ1dHRlcmZs
eSogQnV0dGVyZmx5Ojpncm93UHJvcGVydHlTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBvbGRQcm9wZXJ0eUNhcGFjaXR5LCBzaXpl
X3QgbmV3UHJvcGVydHlDYXBhY2l0eSkKK3sKKyAgICByZXR1cm4gZ3Jvd1Byb3BlcnR5U3RvcmFn
ZSgKKyAgICAgICAgZ2xvYmFsRGF0YSwgaW5kZXhpbmdIZWFkZXIoKS0+cHJlQ2FwYWNpdHkoc3Ry
dWN0dXJlKSwgb2xkUHJvcGVydHlDYXBhY2l0eSwKKyAgICAgICAgaGFzSW5kZXhpbmdIZWFkZXIo
c3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSksCisgICAgICAgIGluZGV4aW5nSGVhZGVyKCktPmlu
ZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKHN0cnVjdHVyZSksIG5ld1Byb3BlcnR5Q2FwYWNpdHkp
OworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6Omdyb3dQcm9wZXJ0eVN0b3JhZ2Uo
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgc2l6ZV90
IG5ld1Byb3BlcnR5Q2FwYWNpdHkpCit7CisgICAgcmV0dXJuIGdyb3dQcm9wZXJ0eVN0b3JhZ2Uo
CisgICAgICAgIGdsb2JhbERhdGEsIG9sZFN0cnVjdHVyZSwgb2xkU3RydWN0dXJlLT5vdXRPZkxp
bmVDYXBhY2l0eSgpLCBuZXdQcm9wZXJ0eUNhcGFjaXR5KTsKK30KKworaW5saW5lIEJ1dHRlcmZs
eSogQnV0dGVyZmx5Ojpncm93QXJyYXlSaWdodChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0
cnVjdHVyZSogb2xkU3RydWN0dXJlLCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYWRJ
bmRleGluZ0hlYWRlciwgc2l6ZV90IG9sZEluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzLCBzaXpl
X3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCit7CisgICAgQVNTRVJUX1VOVVNFRChv
bGRTdHJ1Y3R1cmUsICFpbmRleGluZ0hlYWRlcigpLT5wcmVDYXBhY2l0eShvbGRTdHJ1Y3R1cmUp
KTsKKyAgICBBU1NFUlRfVU5VU0VEKG9sZFN0cnVjdHVyZSwgaGFkSW5kZXhpbmdIZWFkZXIgPT0g
aGFzSW5kZXhpbmdIZWFkZXIob2xkU3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpOworICAgIHZv
aWQqIHRoZUJhc2UgPSBiYXNlKDAsIHByb3BlcnR5Q2FwYWNpdHkpOworICAgIHNpemVfdCBvbGRT
aXplID0gdG90YWxTaXplKDAsIHByb3BlcnR5Q2FwYWNpdHksIGhhZEluZGV4aW5nSGVhZGVyLCBv
bGRJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgc2l6ZV90IG5ld1NpemUgPSB0b3Rh
bFNpemUoMCwgcHJvcGVydHlDYXBhY2l0eSwgdHJ1ZSwgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUlu
Qnl0ZXMpOworICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeVJlYWxsb2NhdGVTdG9yYWdlKCZ0
aGVCYXNlLCBvbGRTaXplLCBuZXdTaXplKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJu
IGZyb21CYXNlKHRoZUJhc2UsIDAsIHByb3BlcnR5Q2FwYWNpdHkpOworfQorCitpbmxpbmUgQnV0
dGVyZmx5KiBCdXR0ZXJmbHk6Omdyb3dBcnJheVJpZ2h0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXpl
SW5CeXRlcykKK3sKKyAgICByZXR1cm4gZ3Jvd0FycmF5UmlnaHQoCisgICAgICAgIGdsb2JhbERh
dGEsIG9sZFN0cnVjdHVyZSwgb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLAorICAg
ICAgICBoYXNJbmRleGluZ0hlYWRlcihvbGRTdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSwKKyAg
ICAgICAgaW5kZXhpbmdIZWFkZXIoKS0+aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMob2xkU3Ry
dWN0dXJlKSwgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworfQorCitpbmxpbmUgQnV0
dGVyZmx5KiBCdXR0ZXJmbHk6OnJlc2l6ZUFycmF5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
c2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgb2xkSGFzSW5kZXhpbmdIZWFkZXIsIHNpemVf
dCBvbGRJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcywgc2l6ZV90IG5ld1ByZUNhcGFjaXR5LCBi
b29sIG5ld0hhc0luZGV4aW5nSGVhZGVyLCBzaXplX3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUlu
Qnl0ZXMpCit7CisgICAgQnV0dGVyZmx5KiByZXN1bHQgPSBjcmVhdGVVbmluaXRpYWxpemVkKAor
ICAgICAgICBnbG9iYWxEYXRhLCBuZXdQcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgbmV3
SGFzSW5kZXhpbmdIZWFkZXIsIG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICAv
LyBGSVhNRTogVGhpcyBjb3VsZCBiZSBtYWRlIG11Y2ggbW9yZSBlZmZpY2llbnQgaWYgd2UgdXNl
ZCB0aGUgcHJvcGVydHkgc2l6ZSwKKyAgICAvLyBub3QgdGhlIGNhcGFjaXR5LgorICAgIHZvaWQq
IHRvID0gcmVzdWx0LT5wcm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5Q2FwYWNpdHk7CisgICAg
dm9pZCogZnJvbSA9IHByb3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVydHlDYXBhY2l0eTsKKyAgICBz
aXplX3Qgc2l6ZSA9IHN0ZDo6bWluKAorICAgICAgICB0b3RhbFNpemUoMCwgcHJvcGVydHlDYXBh
Y2l0eSwgb2xkSGFzSW5kZXhpbmdIZWFkZXIsIG9sZEluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVz
KSwKKyAgICAgICAgdG90YWxTaXplKDAsIHByb3BlcnR5Q2FwYWNpdHksIG5ld0hhc0luZGV4aW5n
SGVhZGVyLCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykpOworICAgIG1lbWNweSh0bywg
ZnJvbSwgc2l6ZSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5lIEJ1dHRlcmZseSog
QnV0dGVyZmx5OjpyZXNpemVBcnJheShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBzaXplX3QgbmV3UHJlQ2FwYWNpdHksIHNpemVfdCBuZXdJbmRleGluZ1Bh
eWxvYWRTaXplSW5CeXRlcykKK3sKKyAgICBib29sIGhhc0luZGV4aW5nSGVhZGVyID0gSlNDOjpo
YXNJbmRleGluZ0hlYWRlcihzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKTsKKyAgICByZXR1cm4g
cmVzaXplQXJyYXkoCisgICAgICAgIGdsb2JhbERhdGEsIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKSwgaGFzSW5kZXhpbmdIZWFkZXIsCisgICAgICAgIGluZGV4aW5nSGVhZGVyKCktPmlu
ZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKHN0cnVjdHVyZSksIG5ld1ByZUNhcGFjaXR5LAorICAg
ICAgICBoYXNJbmRleGluZ0hlYWRlciwgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwor
fQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OnVuc2hpZnQoU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIHNpemVfdCBudW1iZXJPZlNsb3RzKQoreworICAgIEFTU0VSVChoYXNBcnJheVN0b3Jh
Z2Uoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpOworICAgIEFTU0VSVChudW1iZXJPZlNsb3Rz
IDw9IGluZGV4aW5nSGVhZGVyKCktPnByZUNhcGFjaXR5KHN0cnVjdHVyZSkpOworICAgIHVuc2ln
bmVkIHByb3BlcnR5Q2FwYWNpdHkgPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCk7Cisg
ICAgLy8gRklYTUU6IEl0IHdvdWxkIHByb2JhYmx5IGJlIHdpc2UgdG8gcmV3cml0ZSB0aGlzIGFz
IGEgbG9vcCBzaW5jZSAoMSkgd2Uga25vdyBpbiB3aGljaAorICAgIC8vIGRpcmVjdGlvbiB3ZSdy
ZSBtb3ZpbmcgbWVtb3J5IHNvIHdlIGRvbid0IG5lZWQgdGhlIGV4dHJhIGNoZWNrIG9mIG1lbW1v
dmUgYW5kICgyKSB3ZSdyZQorICAgIC8vIG1vdmluZyBhIHNtYWxsIGFtb3VudCBvZiBtZW1vcnkg
aW4gdGhlIGNvbW1vbiBjYXNlIHNvIHRoZSB0aHJvdWdocHV0IG9mIG1lbW1vdmUgd29uJ3QKKyAg
ICAvLyBhbW9ydGl6ZSB0aGUgb3ZlcmhlYWQgb2YgY2FsbGluZyBpdC4gQW5kIG5vLCB3ZSBjYW5u
b3QgcmVseSBvbiB0aGUgQysrIGNvbXBpbGVyIHRvCisgICAgLy8gaW5saW5lIG1lbW1vdmUgKHBh
cnRpY3VsYXJseSBzaW5jZSB0aGUgc2l6ZSBhcmd1bWVudCBpcyBsaWtlbHkgdG8gYmUgdmFyaWFi
bGUpLCBub3IgY2FuCisgICAgLy8gd2UgcmVseSBvbiB0aGUgY29tcGlsZXIgdG8gcmVjb2duaXpl
IHRoZSBvcmRlcmluZyBvZiB0aGUgcG9pbnRlciBhcmd1bWVudHMgKHNpbmNlCisgICAgLy8gcHJv
cGVydHlDYXBhY2l0eSBpcyB2YXJpYWJsZSBhbmQgY291bGQgY2F1c2Ugd3JhcC1hcm91bmQgYXMg
ZmFyIGFzIHRoZSBjb21waWxlciBrbm93cykuCisgICAgbWVtbW92ZSgKKyAgICAgICAgcHJvcGVy
dHlTdG9yYWdlKCkgLSBudW1iZXJPZlNsb3RzIC0gcHJvcGVydHlDYXBhY2l0eSwKKyAgICAgICAg
cHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eUNhcGFjaXR5LAorICAgICAgICBzaXplb2YoRW5j
b2RlZEpTVmFsdWUpICogcHJvcGVydHlDYXBhY2l0eSArIHNpemVvZihJbmRleGluZ0hlYWRlcikg
KyBBcnJheVN0b3JhZ2U6OnNpemVGb3IoMCkpOworICAgIHJldHVybiBJbmRleGluZ0hlYWRlcjo6
ZnJvbUVuZE9mKHByb3BlcnR5U3RvcmFnZSgpIC0gbnVtYmVyT2ZTbG90cyktPmJ1dHRlcmZseSgp
OworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OnNoaWZ0KFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBzaXplX3QgbnVtYmVyT2ZTbG90cykKK3sKKyAgICBBU1NFUlQoaGFzQXJyYXlTdG9y
YWdlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKTsKKyAgICB1bnNpZ25lZCBwcm9wZXJ0eUNh
cGFjaXR5ID0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpOworICAgIC8vIEZJWE1FOiBT
ZWUgY29tbWVudCBpbiB1bnNoaWZ0KCksIGFib3ZlLgorICAgIG1lbW1vdmUoCisgICAgICAgIHBy
b3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVydHlDYXBhY2l0eSArIG51bWJlck9mU2xvdHMsCisgICAg
ICAgIHByb3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVydHlDYXBhY2l0eSwKKyAgICAgICAgc2l6ZW9m
KEVuY29kZWRKU1ZhbHVlKSAqIHByb3BlcnR5Q2FwYWNpdHkgKyBzaXplb2YoSW5kZXhpbmdIZWFk
ZXIpICsgQXJyYXlTdG9yYWdlOjpzaXplRm9yKDApKTsKKyAgICByZXR1cm4gSW5kZXhpbmdIZWFk
ZXI6OmZyb21FbmRPZihwcm9wZXJ0eVN0b3JhZ2UoKSArIG51bWJlck9mU2xvdHMpLT5idXR0ZXJm
bHkoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBCdXR0ZXJmbHlJbmxp
bmVNZXRob2RzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVy
Zmx5SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0J1dHRlcmZseUlubGluZXMuaAkocmV2aXNpb24gMTMzMzg5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMywx
MiArMjMsMTIgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYgQnV0dGVyZmx5SW5s
aW5lTWV0aG9kc19oCi0jZGVmaW5lIEJ1dHRlcmZseUlubGluZU1ldGhvZHNfaAorI2lmbmRlZiBC
dXR0ZXJmbHlJbmxpbmVzX2gKKyNkZWZpbmUgQnV0dGVyZmx5SW5saW5lc19oCiAKICNpbmNsdWRl
ICJBcnJheVN0b3JhZ2UuaCIKICNpbmNsdWRlICJCdXR0ZXJmbHkuaCIKLSNpbmNsdWRlICJDb3Bp
ZWRTcGFjZUlubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZXMuaCIK
ICNpbmNsdWRlICJDb3B5VmlzaXRvci5oIgogI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgogI2lu
Y2x1ZGUgIlN0cnVjdHVyZS5oIgpAQCAtMTc1LDUgKzE3NSw1IEBAIGlubGluZSBCdXR0ZXJmbHkq
IEJ1dHRlcmZseTo6c2hpZnQoU3RydWMKIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKLSNlbmRpZiAv
LyBCdXR0ZXJmbHlJbmxpbmVNZXRob2RzX2gKKyNlbmRpZiAvLyBCdXR0ZXJmbHlJbmxpbmVzX2gK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXJJbmxp
bmVNZXRob2RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmgJKHJldmlzaW9uIDEzMzM5MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDYxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBJbmRleGluZ0hlYWRlcklubGluZU1ldGhvZHNf
aAotI2RlZmluZSBJbmRleGluZ0hlYWRlcklubGluZU1ldGhvZHNfaAotCi0jaW5jbHVkZSAiQXJy
YXlTdG9yYWdlLmgiCi0jaW5jbHVkZSAiSW5kZXhpbmdIZWFkZXIuaCIKLSNpbmNsdWRlICJTdHJ1
Y3R1cmUuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWlubGluZSBzaXplX3QgSW5kZXhpbmdIZWFk
ZXI6OnByZUNhcGFjaXR5KFN0cnVjdHVyZSogc3RydWN0dXJlKQotewotICAgIGlmIChMSUtFTFko
IWhhc0FycmF5U3RvcmFnZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkpCi0gICAgICAgIHJl
dHVybiAwOwotICAgIAotICAgIHJldHVybiBhcnJheVN0b3JhZ2UoKS0+bV9pbmRleEJpYXM7Ci19
Ci0KLWlubGluZSBzaXplX3QgSW5kZXhpbmdIZWFkZXI6OmluZGV4aW5nUGF5bG9hZFNpemVJbkJ5
dGVzKFN0cnVjdHVyZSogc3RydWN0dXJlKQotewotICAgIHN3aXRjaCAoc3RydWN0dXJlLT5pbmRl
eGluZ1R5cGUoKSkgewotICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6Ci0g
ICAgICAgIHJldHVybiB2ZWN0b3JMZW5ndGgoKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7Ci0g
ICAgICAgIAotICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6Ci0gICAg
ICAgIHJldHVybiBBcnJheVN0b3JhZ2U6OnNpemVGb3IoYXJyYXlTdG9yYWdlKCktPnZlY3Rvckxl
bmd0aCgpKTsKLSAgICAgICAgCi0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUKCFoYXNJbmRl
eGVkUHJvcGVydGllcyhzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSk7Ci0gICAgICAgIHJldHVy
biAwOwotICAgIH0KLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBJbmRleGlu
Z0hlYWRlcklubGluZU1ldGhvZHNfaAotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbmRleGluZ0hlYWRlcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlcklubGluZXMuaAkocmV2aXNpb24gMTMzMzg5
KQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlcklubGlu
ZU1ldGhvZHMuaDoxMzMzODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRl
eGluZ0hlYWRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYxIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSW5kZXhp
bmdIZWFkZXJJbmxpbmVNZXRob2RzX2gKKyNkZWZpbmUgSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRo
b2RzX2gKKworI2luY2x1ZGUgIkFycmF5U3RvcmFnZS5oIgorI2luY2x1ZGUgIkluZGV4aW5nSGVh
ZGVyLmgiCisjaW5jbHVkZSAiU3RydWN0dXJlLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitpbmxp
bmUgc2l6ZV90IEluZGV4aW5nSGVhZGVyOjpwcmVDYXBhY2l0eShTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkKK3sKKyAgICBpZiAoTElLRUxZKCFoYXNBcnJheVN0b3JhZ2Uoc3RydWN0dXJlLT5pbmRleGlu
Z1R5cGUoKSkpKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICByZXR1cm4gYXJyYXlTdG9y
YWdlKCktPm1faW5kZXhCaWFzOworfQorCitpbmxpbmUgc2l6ZV90IEluZGV4aW5nSGVhZGVyOjpp
bmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyhTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICBz
d2l0Y2ggKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFMTF9DT05USUdV
T1VTX0lOREVYSU5HX1RZUEVTOgorICAgICAgICByZXR1cm4gdmVjdG9yTGVuZ3RoKCkgKiBzaXpl
b2YoRW5jb2RlZEpTVmFsdWUpOworICAgICAgICAKKyAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdF
X0lOREVYSU5HX1RZUEVTOgorICAgICAgICByZXR1cm4gQXJyYXlTdG9yYWdlOjpzaXplRm9yKGFy
cmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgIAorICAgIGRlZmF1bHQ6Cisg
ICAgICAgIEFTU0VSVCghaGFzSW5kZXhlZFByb3BlcnRpZXMoc3RydWN0dXJlLT5pbmRleGluZ1R5
cGUoKSkpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIEpT
QworCisjZW5kaWYgLy8gSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXJJbmxpbmVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXJJbmxp
bmVzLmgJKHJldmlzaW9uIDEzMzM4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0luZGV4aW5nSGVhZGVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw4ICsyMyw4IEBA
CiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVmIEluZGV4aW5nSGVhZGVySW5saW5lTWV0
aG9kc19oCi0jZGVmaW5lIEluZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kc19oCisjaWZuZGVmIElu
ZGV4aW5nSGVhZGVySW5saW5lc19oCisjZGVmaW5lIEluZGV4aW5nSGVhZGVySW5saW5lc19oCiAK
ICNpbmNsdWRlICJBcnJheVN0b3JhZ2UuaCIKICNpbmNsdWRlICJJbmRleGluZ0hlYWRlci5oIgpA
QCAtNTcsNSArNTcsNSBAQCBpbmxpbmUgc2l6ZV90IEluZGV4aW5nSGVhZGVyOjppbmRleGluZ1Bh
CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCi0jZW5kaWYgLy8gSW5kZXhpbmdIZWFkZXJJbmxpbmVN
ZXRob2RzX2gKKyNlbmRpZiAvLyBJbmRleGluZ0hlYWRlcklubGluZXNfaAogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uaAkocmV2aXNpb24gMTMz
MzkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKICNkZWZpbmUgSlNBY3RpdmF0aW9uX2gKIAog
I2luY2x1ZGUgIkNvZGVCbG9jay5oIgotI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lTWV0aG9k
cy5oIgorI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTVmFyaWFi
bGVPYmplY3QuaCIKICNpbmNsdWRlICJOb2Rlcy5oIgogI2luY2x1ZGUgIlN5bWJvbFRhYmxlLmgi
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAkocmV2aXNp
b24gMTMzMzkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI0LDE0ICsyNCwxNCBAQAogI2luY2x1ZGUgIkpTQXJyYXkuaCIK
IAogI2luY2x1ZGUgIkFycmF5UHJvdG90eXBlLmgiCi0jaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5l
TWV0aG9kcy5oIgotI2luY2x1ZGUgIkNvcGllZFNwYWNlLmgiCi0jaW5jbHVkZSAiQ29waWVkU3Bh
Y2VJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lcy5oIgogI2luY2x1
ZGUgIkNhY2hlZENhbGwuaCIKKyNpbmNsdWRlICJDb3BpZWRTcGFjZS5oIgorI2luY2x1ZGUgIkNv
cGllZFNwYWNlSW5saW5lcy5oIgogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiRXhlY3V0
YWJsZS5oIgogI2luY2x1ZGUgIkdldHRlclNldHRlci5oIgotI2luY2x1ZGUgIkluZGV4aW5nSGVh
ZGVySW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkluZGV4aW5nSGVhZGVySW5saW5lcy5oIgog
I2luY2x1ZGUgIlByb3BlcnR5TmFtZUFycmF5LmgiCiAjaW5jbHVkZSAiUmVqZWN0LmgiCiAjaW5j
bHVkZSA8d3RmL0FWTFRyZWUuaD4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0FycmF5LmgJKHJldmlzaW9uIDEzMzM5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMjIsNyArMjIsNyBAQAogI2RlZmluZSBK
U0FycmF5X2gKIAogI2luY2x1ZGUgIkFycmF5Q29udmVudGlvbnMuaCIKLSNpbmNsdWRlICJCdXR0
ZXJmbHlJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lcy5oIgogI2lu
Y2x1ZGUgIkpTT2JqZWN0LmgiCiAKIG5hbWVzcGFjZSBKU0MgewpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHJldmlzaW9uIDEzMzM5MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw5ICsyOCw5
IEBACiAjaW5jbHVkZSAiQ29uc3RydWN0RGF0YS5oIgogI2luY2x1ZGUgIkhlYXAuaCIKICNpbmNs
dWRlICJKU0xvY2suaCIKLSNpbmNsdWRlICJKU1ZhbHVlSW5saW5lTWV0aG9kcy5oIgorI2luY2x1
ZGUgIkpTVmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKLSNpbmNsdWRl
ICJTbG90VmlzaXRvcklubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJTbG90VmlzaXRvcklubGlu
ZXMuaCIKICNpbmNsdWRlICJUeXBlZEFycmF5RGVzY3JpcHRvci5oIgogI2luY2x1ZGUgIldyaXRl
QmFycmllci5oIgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMTMzMzkyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNCwxNCArMjQsMTQgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU09i
amVjdC5oIgogCi0jaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oIgotI2luY2x1ZGUg
IkNvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkJ1dHRlcmZseUlubGluZXMu
aCIKKyNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZXMuaCIKICNpbmNsdWRlICJDb3B5VmlzaXRv
ci5oIgotI2luY2x1ZGUgIkNvcHlWaXNpdG9ySW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkNv
cHlWaXNpdG9ySW5saW5lcy5oIgogI2luY2x1ZGUgIkRhdGVQcm90b3R5cGUuaCIKICNpbmNsdWRl
ICJFcnJvckNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCi0jaW5jbHVk
ZSAiSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiSW5kZXhpbmdIZWFk
ZXJJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkpTR2xvYmFs
T2JqZWN0LmgiCiAjaW5jbHVkZSAiTG9va3VwLmgiCkBAIC00Miw3ICs0Miw3IEBACiAjaW5jbHVk
ZSAiUHJvcGVydHlEZXNjcmlwdG9yLmgiCiAjaW5jbHVkZSAiUHJvcGVydHlOYW1lQXJyYXkuaCIK
ICNpbmNsdWRlICJSZWplY3QuaCIKLSNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZU1ldGhvZHMu
aCIKKyNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKICNpbmNsdWRlIDxtYXRoLmg+CiAj
aW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNWYWx1ZUlubGluZU1ldGhvZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlSW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAxMzMz
OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlSW5saW5lTWV0aG9k
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ5NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgSlNWYWx1ZUlubGluZU1ldGhvZHNf
aAotI2RlZmluZSBKU1ZhbHVlSW5saW5lTWV0aG9kc19oCi0KLSNpbmNsdWRlICJKU1ZhbHVlLmgi
Ci0KLW5hbWVzcGFjZSBKU0MgewotCi0gICAgQUxXQVlTX0lOTElORSBpbnQzMl90IEpTVmFsdWU6
OnRvSW50MzIoRXhlY1N0YXRlKiBleGVjKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKGlzSW50
MzIoKSkKLSAgICAgICAgICAgIHJldHVybiBhc0ludDMyKCk7Ci0gICAgICAgIHJldHVybiBKU0M6
OnRvSW50MzIodG9OdW1iZXIoZXhlYykpOwotICAgIH0KLQotICAgIGlubGluZSB1aW50MzJfdCBK
U1ZhbHVlOjp0b1VJbnQzMihFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0Ci0gICAgewotICAgICAgICAv
LyBTZWUgY29tbWVudCBvbiBKU0M6OnRvVUludDMyLCBhYm92ZS4KLSAgICAgICAgcmV0dXJuIHRv
SW50MzIoZXhlYyk7Ci0gICAgfQotCi0gICAgaW5saW5lIGJvb2wgSlNWYWx1ZTo6aXNVSW50MzIo
KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGlzSW50MzIoKSAmJiBhc0ludDMyKCkgPj0g
MDsKLSAgICB9Ci0KLSAgICBpbmxpbmUgdWludDMyX3QgSlNWYWx1ZTo6YXNVSW50MzIoKSBjb25z
dAotICAgIHsKLSAgICAgICAgQVNTRVJUKGlzVUludDMyKCkpOwotICAgICAgICByZXR1cm4gYXNJ
bnQzMigpOwotICAgIH0KLQotICAgIGlubGluZSBkb3VibGUgSlNWYWx1ZTo6YXNOdW1iZXIoKSBj
b25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGlzTnVtYmVyKCkpOwotICAgICAgICByZXR1cm4g
aXNJbnQzMigpID8gYXNJbnQzMigpIDogYXNEb3VibGUoKTsKLSAgICB9Ci0KLSAgICBpbmxpbmUg
SlNWYWx1ZSBqc05hTigpCi0gICAgewotICAgICAgICByZXR1cm4gSlNWYWx1ZShzdGQ6Om51bWVy
aWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpKTsKLSAgICB9Ci0KLSAgICBpbmxpbmUgSlNW
YWx1ZTo6SlNWYWx1ZShjaGFyIGkpCi0gICAgewotICAgICAgICAqdGhpcyA9IEpTVmFsdWUoc3Rh
dGljX2Nhc3Q8aW50MzJfdD4oaSkpOwotICAgIH0KLQotICAgIGlubGluZSBKU1ZhbHVlOjpKU1Zh
bHVlKHVuc2lnbmVkIGNoYXIgaSkKLSAgICB7Ci0gICAgICAgICp0aGlzID0gSlNWYWx1ZShzdGF0
aWNfY2FzdDxpbnQzMl90PihpKSk7Ci0gICAgfQotCi0gICAgaW5saW5lIEpTVmFsdWU6OkpTVmFs
dWUoc2hvcnQgaSkKLSAgICB7Ci0gICAgICAgICp0aGlzID0gSlNWYWx1ZShzdGF0aWNfY2FzdDxp
bnQzMl90PihpKSk7Ci0gICAgfQotCi0gICAgaW5saW5lIEpTVmFsdWU6OkpTVmFsdWUodW5zaWdu
ZWQgc2hvcnQgaSkKLSAgICB7Ci0gICAgICAgICp0aGlzID0gSlNWYWx1ZShzdGF0aWNfY2FzdDxp
bnQzMl90PihpKSk7Ci0gICAgfQotCi0gICAgaW5saW5lIEpTVmFsdWU6OkpTVmFsdWUodW5zaWdu
ZWQgaSkKLSAgICB7Ci0gICAgICAgIGlmIChzdGF0aWNfY2FzdDxpbnQzMl90PihpKSA8IDApIHsK
LSAgICAgICAgICAgICp0aGlzID0gSlNWYWx1ZShFbmNvZGVBc0RvdWJsZSwgc3RhdGljX2Nhc3Q8
ZG91YmxlPihpKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgKnRo
aXMgPSBKU1ZhbHVlKHN0YXRpY19jYXN0PGludDMyX3Q+KGkpKTsKLSAgICB9Ci0KLSAgICBpbmxp
bmUgSlNWYWx1ZTo6SlNWYWx1ZShsb25nIGkpCi0gICAgewotICAgICAgICBpZiAoc3RhdGljX2Nh
c3Q8aW50MzJfdD4oaSkgIT0gaSkgewotICAgICAgICAgICAgKnRoaXMgPSBKU1ZhbHVlKEVuY29k
ZUFzRG91YmxlLCBzdGF0aWNfY2FzdDxkb3VibGU+KGkpKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotICAgICAgICAqdGhpcyA9IEpTVmFsdWUoc3RhdGljX2Nhc3Q8aW50MzJfdD4o
aSkpOwotICAgIH0KLQotICAgIGlubGluZSBKU1ZhbHVlOjpKU1ZhbHVlKHVuc2lnbmVkIGxvbmcg
aSkKLSAgICB7Ci0gICAgICAgIGlmIChzdGF0aWNfY2FzdDx1aW50MzJfdD4oaSkgIT0gaSkgewot
ICAgICAgICAgICAgKnRoaXMgPSBKU1ZhbHVlKEVuY29kZUFzRG91YmxlLCBzdGF0aWNfY2FzdDxk
b3VibGU+KGkpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAqdGhp
cyA9IEpTVmFsdWUoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGkpKTsKLSAgICB9Ci0KLSAgICBpbmxp
bmUgSlNWYWx1ZTo6SlNWYWx1ZShsb25nIGxvbmcgaSkKLSAgICB7Ci0gICAgICAgIGlmIChzdGF0
aWNfY2FzdDxpbnQzMl90PihpKSAhPSBpKSB7Ci0gICAgICAgICAgICAqdGhpcyA9IEpTVmFsdWUo
RW5jb2RlQXNEb3VibGUsIHN0YXRpY19jYXN0PGRvdWJsZT4oaSkpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgICAgICp0aGlzID0gSlNWYWx1ZShzdGF0aWNfY2FzdDxpbnQz
Ml90PihpKSk7Ci0gICAgfQotCi0gICAgaW5saW5lIEpTVmFsdWU6OkpTVmFsdWUodW5zaWduZWQg
bG9uZyBsb25nIGkpCi0gICAgewotICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGkp
ICE9IGkpIHsKLSAgICAgICAgICAgICp0aGlzID0gSlNWYWx1ZShFbmNvZGVBc0RvdWJsZSwgc3Rh
dGljX2Nhc3Q8ZG91YmxlPihpKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAg
ICAgICAgKnRoaXMgPSBKU1ZhbHVlKHN0YXRpY19jYXN0PHVpbnQzMl90PihpKSk7Ci0gICAgfQot
Ci0gICAgaW5saW5lIEpTVmFsdWU6OkpTVmFsdWUoZG91YmxlIGQpCi0gICAgewotICAgICAgICBj
b25zdCBpbnQzMl90IGFzSW50MzIgPSBzdGF0aWNfY2FzdDxpbnQzMl90PihkKTsKLSAgICAgICAg
aWYgKGFzSW50MzIgIT0gZCB8fCAoIWFzSW50MzIgJiYgc2lnbmJpdChkKSkpIHsgLy8gdHJ1ZSBm
b3IgLTAuMAotICAgICAgICAgICAgKnRoaXMgPSBKU1ZhbHVlKEVuY29kZUFzRG91YmxlLCBkKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAqdGhpcyA9IEpTVmFsdWUo
c3RhdGljX2Nhc3Q8aW50MzJfdD4oZCkpOwotICAgIH0KLQotICAgIGlubGluZSBFbmNvZGVkSlNW
YWx1ZSBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biB2YWx1ZS51LmFzSW50NjQ7Ci0gICAgfQotCi0gICAgaW5saW5lIEpTVmFsdWUgSlNWYWx1ZTo6
ZGVjb2RlKEVuY29kZWRKU1ZhbHVlIGVuY29kZWRKU1ZhbHVlKQotICAgIHsKLSAgICAgICAgSlNW
YWx1ZSB2OwotICAgICAgICB2LnUuYXNJbnQ2NCA9IGVuY29kZWRKU1ZhbHVlOwotICAgICAgICBy
ZXR1cm4gdjsKLSAgICB9Ci0KLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIGlubGluZSBKU1Zh
bHVlOjpKU1ZhbHVlKCkKLSAgICB7Ci0gICAgICAgIHUuYXNCaXRzLnRhZyA9IEVtcHR5VmFsdWVU
YWc7Ci0gICAgICAgIHUuYXNCaXRzLnBheWxvYWQgPSAwOwotICAgIH0KLQotICAgIGlubGluZSBK
U1ZhbHVlOjpKU1ZhbHVlKEpTTnVsbFRhZykKLSAgICB7Ci0gICAgICAgIHUuYXNCaXRzLnRhZyA9
IE51bGxUYWc7Ci0gICAgICAgIHUuYXNCaXRzLnBheWxvYWQgPSAwOwotICAgIH0KLSAgICAKLSAg
ICBpbmxpbmUgSlNWYWx1ZTo6SlNWYWx1ZShKU1VuZGVmaW5lZFRhZykKLSAgICB7Ci0gICAgICAg
IHUuYXNCaXRzLnRhZyA9IFVuZGVmaW5lZFRhZzsKLSAgICAgICAgdS5hc0JpdHMucGF5bG9hZCA9
IDA7Ci0gICAgfQotICAgIAotICAgIGlubGluZSBKU1ZhbHVlOjpKU1ZhbHVlKEpTVHJ1ZVRhZykK
LSAgICB7Ci0gICAgICAgIHUuYXNCaXRzLnRhZyA9IEJvb2xlYW5UYWc7Ci0gICAgICAgIHUuYXNC
aXRzLnBheWxvYWQgPSAxOwotICAgIH0KLSAgICAKLSAgICBpbmxpbmUgSlNWYWx1ZTo6SlNWYWx1
ZShKU0ZhbHNlVGFnKQotICAgIHsKLSAgICAgICAgdS5hc0JpdHMudGFnID0gQm9vbGVhblRhZzsK
LSAgICAgICAgdS5hc0JpdHMucGF5bG9hZCA9IDA7Ci0gICAgfQotCi0gICAgaW5saW5lIEpTVmFs
dWU6OkpTVmFsdWUoSGFzaFRhYmxlRGVsZXRlZFZhbHVlVGFnKQotICAgIHsKLSAgICAgICAgdS5h
c0JpdHMudGFnID0gRGVsZXRlZFZhbHVlVGFnOwotICAgICAgICB1LmFzQml0cy5wYXlsb2FkID0g
MDsKLSAgICB9Ci0KLSAgICBpbmxpbmUgSlNWYWx1ZTo6SlNWYWx1ZShKU0NlbGwqIHB0cikKLSAg
ICB7Ci0gICAgICAgIGlmIChwdHIpCi0gICAgICAgICAgICB1LmFzQml0cy50YWcgPSBDZWxsVGFn
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB1LmFzQml0cy50YWcgPSBFbXB0eVZhbHVlVGFn
OwotICAgICAgICB1LmFzQml0cy5wYXlsb2FkID0gcmVpbnRlcnByZXRfY2FzdDxpbnQzMl90Pihw
dHIpOwotICAgIH0KLQotICAgIGlubGluZSBKU1ZhbHVlOjpKU1ZhbHVlKGNvbnN0IEpTQ2VsbCog
cHRyKQotICAgIHsKLSAgICAgICAgaWYgKHB0cikKLSAgICAgICAgICAgIHUuYXNCaXRzLnRhZyA9
IENlbGxUYWc7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHUuYXNCaXRzLnRhZyA9IEVtcHR5
VmFsdWVUYWc7Ci0gICAgICAgIHUuYXNCaXRzLnBheWxvYWQgPSByZWludGVycHJldF9jYXN0PGlu
dDMyX3Q+KGNvbnN0X2Nhc3Q8SlNDZWxsKj4ocHRyKSk7Ci0gICAgfQotCi0gICAgaW5saW5lIEpT
VmFsdWU6Om9wZXJhdG9yIGJvb2woKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKHRhZygp
ICE9IERlbGV0ZWRWYWx1ZVRhZyk7Ci0gICAgICAgIHJldHVybiB0YWcoKSAhPSBFbXB0eVZhbHVl
VGFnOwotICAgIH0KLQotICAgIGlubGluZSBib29sIEpTVmFsdWU6Om9wZXJhdG9yPT0oY29uc3Qg
SlNWYWx1ZSYgb3RoZXIpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gdS5hc0ludDY0ID09
IG90aGVyLnUuYXNJbnQ2NDsKLSAgICB9Ci0KLSAgICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjpvcGVy
YXRvciE9KGNvbnN0IEpTVmFsdWUmIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJu
IHUuYXNJbnQ2NCAhPSBvdGhlci51LmFzSW50NjQ7Ci0gICAgfQotCi0gICAgaW5saW5lIGJvb2wg
SlNWYWx1ZTo6aXNFbXB0eSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gdGFnKCkgPT0g
RW1wdHlWYWx1ZVRhZzsKLSAgICB9Ci0KLSAgICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjppc1VuZGVm
aW5lZCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gdGFnKCkgPT0gVW5kZWZpbmVkVGFn
OwotICAgIH0KLQotICAgIGlubGluZSBib29sIEpTVmFsdWU6OmlzTnVsbCgpIGNvbnN0Ci0gICAg
ewotICAgICAgICByZXR1cm4gdGFnKCkgPT0gTnVsbFRhZzsKLSAgICB9Ci0KLSAgICBpbmxpbmUg
Ym9vbCBKU1ZhbHVlOjppc1VuZGVmaW5lZE9yTnVsbCgpIGNvbnN0Ci0gICAgewotICAgICAgICBy
ZXR1cm4gaXNVbmRlZmluZWQoKSB8fCBpc051bGwoKTsKLSAgICB9Ci0KLSAgICBpbmxpbmUgYm9v
bCBKU1ZhbHVlOjppc0NlbGwoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIHRhZygpID09
IENlbGxUYWc7Ci0gICAgfQotCi0gICAgaW5saW5lIGJvb2wgSlNWYWx1ZTo6aXNJbnQzMigpIGNv
bnN0Ci0gICAgewotICAgICAgICByZXR1cm4gdGFnKCkgPT0gSW50MzJUYWc7Ci0gICAgfQotCi0g
ICAgaW5saW5lIGJvb2wgSlNWYWx1ZTo6aXNEb3VibGUoKSBjb25zdAotICAgIHsKLSAgICAgICAg
cmV0dXJuIHRhZygpIDwgTG93ZXN0VGFnOwotICAgIH0KLQotICAgIGlubGluZSBib29sIEpTVmFs
dWU6OmlzVHJ1ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gdGFnKCkgPT0gQm9vbGVh
blRhZyAmJiBwYXlsb2FkKCk7Ci0gICAgfQotCi0gICAgaW5saW5lIGJvb2wgSlNWYWx1ZTo6aXNG
YWxzZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gdGFnKCkgPT0gQm9vbGVhblRhZyAm
JiAhcGF5bG9hZCgpOwotICAgIH0KLQotICAgIGlubGluZSB1aW50MzJfdCBKU1ZhbHVlOjp0YWco
KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIHUuYXNCaXRzLnRhZzsKLSAgICB9Ci0gICAg
Ci0gICAgaW5saW5lIGludDMyX3QgSlNWYWx1ZTo6cGF5bG9hZCgpIGNvbnN0Ci0gICAgewotICAg
ICAgICByZXR1cm4gdS5hc0JpdHMucGF5bG9hZDsKLSAgICB9Ci0gICAgCi0gICAgaW5saW5lIGlu
dDMyX3QgSlNWYWx1ZTo6YXNJbnQzMigpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoaXNJ
bnQzMigpKTsKLSAgICAgICAgcmV0dXJuIHUuYXNCaXRzLnBheWxvYWQ7Ci0gICAgfQotICAgIAot
ICAgIGlubGluZSBkb3VibGUgSlNWYWx1ZTo6YXNEb3VibGUoKSBjb25zdAotICAgIHsKLSAgICAg
ICAgQVNTRVJUKGlzRG91YmxlKCkpOwotICAgICAgICByZXR1cm4gdS5hc0RvdWJsZTsKLSAgICB9
Ci0gICAgCi0gICAgQUxXQVlTX0lOTElORSBKU0NlbGwqIEpTVmFsdWU6OmFzQ2VsbCgpIGNvbnN0
Ci0gICAgewotICAgICAgICBBU1NFUlQoaXNDZWxsKCkpOwotICAgICAgICByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxKU0NlbGwqPih1LmFzQml0cy5wYXlsb2FkKTsKLSAgICB9Ci0KLSAgICBBTFdB
WVNfSU5MSU5FIEpTVmFsdWU6OkpTVmFsdWUoRW5jb2RlQXNEb3VibGVUYWcsIGRvdWJsZSBkKQot
ICAgIHsKLSAgICAgICAgdS5hc0RvdWJsZSA9IGQ7Ci0gICAgfQotCi0gICAgaW5saW5lIEpTVmFs
dWU6OkpTVmFsdWUoaW50IGkpCi0gICAgewotICAgICAgICB1LmFzQml0cy50YWcgPSBJbnQzMlRh
ZzsKLSAgICAgICAgdS5hc0JpdHMucGF5bG9hZCA9IGk7Ci0gICAgfQotCi0jaWYgRU5BQkxFKExM
SU5UX0NfTE9PUCkKLSAgICBpbmxpbmUgSlNWYWx1ZTo6SlNWYWx1ZShpbnQzMl90IHRhZywgaW50
MzJfdCBwYXlsb2FkKQotICAgIHsKLSAgICAgICAgdS5hc0JpdHMudGFnID0gdGFnOwotICAgICAg
ICB1LmFzQml0cy5wYXlsb2FkID0gcGF5bG9hZDsKLSAgICB9Ci0jZW5kaWYKLQotICAgIGlubGlu
ZSBib29sIEpTVmFsdWU6OmlzTnVtYmVyKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBp
c0ludDMyKCkgfHwgaXNEb3VibGUoKTsKLSAgICB9Ci0KLSAgICBpbmxpbmUgYm9vbCBKU1ZhbHVl
Ojppc0Jvb2xlYW4oKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGlzVHJ1ZSgpIHx8IGlz
RmFsc2UoKTsKLSAgICB9Ci0KLSAgICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjphc0Jvb2xlYW4oKSBj
b25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGlzQm9vbGVhbigpKTsKLSAgICAgICAgcmV0dXJu
IHBheWxvYWQoKTsKLSAgICB9Ci0KLSNlbHNlIC8vICFVU0UoSlNWQUxVRTMyXzY0KSBpLmUuIFVT
RShKU1ZBTFVFNjQpCi0KLSAgICAvLyAweDAgY2FuIG5ldmVyIG9jY3VyIG5hdHVyYWxseSBiZWNh
dXNlIGl0IGhhcyBhIHRhZyBvZiAwMCwgaW5kaWNhdGluZyBhIHBvaW50ZXIgdmFsdWUsIGJ1dCBh
IHBheWxvYWQgb2YgMHgwLCB3aGljaCBpcyBpbiB0aGUgKGludmFsaWQpIHplcm8gcGFnZS4KLSAg
ICBpbmxpbmUgSlNWYWx1ZTo6SlNWYWx1ZSgpCi0gICAgewotICAgICAgICB1LmFzSW50NjQgPSBW
YWx1ZUVtcHR5OwotICAgIH0KLQotICAgIC8vIDB4NCBjYW4gbmV2ZXIgb2NjdXIgbmF0dXJhbGx5
IGJlY2F1c2UgaXQgaGFzIGEgdGFnIG9mIDAwLCBpbmRpY2F0aW5nIGEgcG9pbnRlciB2YWx1ZSwg
YnV0IGEgcGF5bG9hZCBvZiAweDQsIHdoaWNoIGlzIGluIHRoZSAoaW52YWxpZCkgemVybyBwYWdl
LgotICAgIGlubGluZSBKU1ZhbHVlOjpKU1ZhbHVlKEhhc2hUYWJsZURlbGV0ZWRWYWx1ZVRhZykK
LSAgICB7Ci0gICAgICAgIHUuYXNJbnQ2NCA9IFZhbHVlRGVsZXRlZDsKLSAgICB9Ci0KLSAgICBp
bmxpbmUgSlNWYWx1ZTo6SlNWYWx1ZShKU0NlbGwqIHB0cikKLSAgICB7Ci0gICAgICAgIHUuYXNJ
bnQ2NCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihwdHIpOwotICAgIH0KLQotICAgIGlu
bGluZSBKU1ZhbHVlOjpKU1ZhbHVlKGNvbnN0IEpTQ2VsbCogcHRyKQotICAgIHsKLSAgICAgICAg
dS5hc0ludDY0ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGNvbnN0X2Nhc3Q8SlNDZWxs
Kj4ocHRyKSk7Ci0gICAgfQotCi0gICAgaW5saW5lIEpTVmFsdWU6Om9wZXJhdG9yIGJvb2woKSBj
b25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIHUuYXNJbnQ2NDsKLSAgICB9Ci0KLSAgICBpbmxp
bmUgYm9vbCBKU1ZhbHVlOjpvcGVyYXRvcj09KGNvbnN0IEpTVmFsdWUmIG90aGVyKSBjb25zdAot
ICAgIHsKLSAgICAgICAgcmV0dXJuIHUuYXNJbnQ2NCA9PSBvdGhlci51LmFzSW50NjQ7Ci0gICAg
fQotCi0gICAgaW5saW5lIGJvb2wgSlNWYWx1ZTo6b3BlcmF0b3IhPShjb25zdCBKU1ZhbHVlJiBv
dGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiB1LmFzSW50NjQgIT0gb3RoZXIudS5h
c0ludDY0OwotICAgIH0KLQotICAgIGlubGluZSBib29sIEpTVmFsdWU6OmlzRW1wdHkoKSBjb25z
dAotICAgIHsKLSAgICAgICAgcmV0dXJuIHUuYXNJbnQ2NCA9PSBWYWx1ZUVtcHR5OwotICAgIH0K
LQotICAgIGlubGluZSBib29sIEpTVmFsdWU6OmlzVW5kZWZpbmVkKCkgY29uc3QKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBhc1ZhbHVlKCkgPT0gSlNWYWx1ZShKU1VuZGVmaW5lZCk7Ci0gICAgfQot
Ci0gICAgaW5saW5lIGJvb2wgSlNWYWx1ZTo6aXNOdWxsKCkgY29uc3QKLSAgICB7Ci0gICAgICAg
IHJldHVybiBhc1ZhbHVlKCkgPT0gSlNWYWx1ZShKU051bGwpOwotICAgIH0KLQotICAgIGlubGlu
ZSBib29sIEpTVmFsdWU6OmlzVHJ1ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gYXNW
YWx1ZSgpID09IEpTVmFsdWUoSlNUcnVlKTsKLSAgICB9Ci0KLSAgICBpbmxpbmUgYm9vbCBKU1Zh
bHVlOjppc0ZhbHNlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBhc1ZhbHVlKCkgPT0g
SlNWYWx1ZShKU0ZhbHNlKTsKLSAgICB9Ci0KLSAgICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjphc0Jv
b2xlYW4oKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGlzQm9vbGVhbigpKTsKLSAgICAg
ICAgcmV0dXJuIGFzVmFsdWUoKSA9PSBKU1ZhbHVlKEpTVHJ1ZSk7Ci0gICAgfQotCi0gICAgaW5s
aW5lIGludDMyX3QgSlNWYWx1ZTo6YXNJbnQzMigpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NF
UlQoaXNJbnQzMigpKTsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludDMyX3Q+KHUuYXNJ
bnQ2NCk7Ci0gICAgfQotCi0gICAgaW5saW5lIGJvb2wgSlNWYWx1ZTo6aXNEb3VibGUoKSBjb25z
dAotICAgIHsKLSAgICAgICAgcmV0dXJuIGlzTnVtYmVyKCkgJiYgIWlzSW50MzIoKTsKLSAgICB9
Ci0KLSAgICBpbmxpbmUgSlNWYWx1ZTo6SlNWYWx1ZShKU051bGxUYWcpCi0gICAgewotICAgICAg
ICB1LmFzSW50NjQgPSBWYWx1ZU51bGw7Ci0gICAgfQotICAgIAotICAgIGlubGluZSBKU1ZhbHVl
OjpKU1ZhbHVlKEpTVW5kZWZpbmVkVGFnKQotICAgIHsKLSAgICAgICAgdS5hc0ludDY0ID0gVmFs
dWVVbmRlZmluZWQ7Ci0gICAgfQotCi0gICAgaW5saW5lIEpTVmFsdWU6OkpTVmFsdWUoSlNUcnVl
VGFnKQotICAgIHsKLSAgICAgICAgdS5hc0ludDY0ID0gVmFsdWVUcnVlOwotICAgIH0KLQotICAg
IGlubGluZSBKU1ZhbHVlOjpKU1ZhbHVlKEpTRmFsc2VUYWcpCi0gICAgewotICAgICAgICB1LmFz
SW50NjQgPSBWYWx1ZUZhbHNlOwotICAgIH0KLQotICAgIGlubGluZSBib29sIEpTVmFsdWU6Omlz
VW5kZWZpbmVkT3JOdWxsKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIC8vIFVuZGVmaW5lZCBhbmQg
bnVsbCBzaGFyZSB0aGUgc2FtZSB2YWx1ZSwgYmFyIHRoZSAndW5kZWZpbmVkJyBiaXQgaW4gdGhl
IGV4dGVuZGVkIHRhZy4KLSAgICAgICAgcmV0dXJuICh1LmFzSW50NjQgJiB+VGFnQml0VW5kZWZp
bmVkKSA9PSBWYWx1ZU51bGw7Ci0gICAgfQotCi0gICAgaW5saW5lIGJvb2wgSlNWYWx1ZTo6aXNC
b29sZWFuKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiAodS5hc0ludDY0ICYgfjEpID09
IFZhbHVlRmFsc2U7Ci0gICAgfQotCi0gICAgaW5saW5lIGJvb2wgSlNWYWx1ZTo6aXNDZWxsKCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiAhKHUuYXNJbnQ2NCAmIFRhZ01hc2spOwotICAg
IH0KLQotICAgIGlubGluZSBib29sIEpTVmFsdWU6OmlzSW50MzIoKSBjb25zdAotICAgIHsKLSAg
ICAgICAgcmV0dXJuICh1LmFzSW50NjQgJiBUYWdUeXBlTnVtYmVyKSA9PSBUYWdUeXBlTnVtYmVy
OwotICAgIH0KLQotICAgIGlubGluZSBpbnQ2NF90IHJlaW50ZXJwcmV0RG91YmxlVG9JbnQ2NChk
b3VibGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PGludDY0X3Q+
KHZhbHVlKTsKLSAgICB9Ci0gICAgaW5saW5lIGRvdWJsZSByZWludGVycHJldEludDY0VG9Eb3Vi
bGUoaW50NjRfdCB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8ZG91
YmxlPih2YWx1ZSk7Ci0gICAgfQotCi0gICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlOjpKU1ZhbHVl
KEVuY29kZUFzRG91YmxlVGFnLCBkb3VibGUgZCkKLSAgICB7Ci0gICAgICAgIHUuYXNJbnQ2NCA9
IHJlaW50ZXJwcmV0RG91YmxlVG9JbnQ2NChkKSArIERvdWJsZUVuY29kZU9mZnNldDsKLSAgICB9
Ci0KLSAgICBpbmxpbmUgSlNWYWx1ZTo6SlNWYWx1ZShpbnQgaSkKLSAgICB7Ci0gICAgICAgIHUu
YXNJbnQ2NCA9IFRhZ1R5cGVOdW1iZXIgfCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oaSk7Ci0gICAg
fQotCi0gICAgaW5saW5lIGRvdWJsZSBKU1ZhbHVlOjphc0RvdWJsZSgpIGNvbnN0Ci0gICAgewot
ICAgICAgICBBU1NFUlQoaXNEb3VibGUoKSk7Ci0gICAgICAgIHJldHVybiByZWludGVycHJldElu
dDY0VG9Eb3VibGUodS5hc0ludDY0IC0gRG91YmxlRW5jb2RlT2Zmc2V0KTsKLSAgICB9Ci0KLSAg
ICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjppc051bWJlcigpIGNvbnN0Ci0gICAgewotICAgICAgICBy
ZXR1cm4gdS5hc0ludDY0ICYgVGFnVHlwZU51bWJlcjsKLSAgICB9Ci0KLSAgICBBTFdBWVNfSU5M
SU5FIEpTQ2VsbCogSlNWYWx1ZTo6YXNDZWxsKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VS
VChpc0NlbGwoKSk7Ci0gICAgICAgIHJldHVybiB1LnB0cjsKLSAgICB9Ci0KLSNlbmRpZiAvLyBV
U0UoSlNWQUxVRTY0KQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIEpTVmFsdWVJ
bmxpbmVNZXRob2RzX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFs
dWVJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNWYWx1ZUlubGluZXMuaAkocmV2aXNpb24gMTMzMzg5KQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1ZhbHVlSW5saW5lTWV0aG9kcy5oOjEzMzM4OSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFsdWVJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw0OTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBKU1ZhbHVlSW5saW5lTWV0aG9kc19oCisjZGVmaW5lIEpTVmFsdWVJbmxp
bmVNZXRob2RzX2gKKworI2luY2x1ZGUgIkpTVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7CisK
KyAgICBBTFdBWVNfSU5MSU5FIGludDMyX3QgSlNWYWx1ZTo6dG9JbnQzMihFeGVjU3RhdGUqIGV4
ZWMpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXNJbnQzMigpKQorICAgICAgICAgICAgcmV0
dXJuIGFzSW50MzIoKTsKKyAgICAgICAgcmV0dXJuIEpTQzo6dG9JbnQzMih0b051bWJlcihleGVj
KSk7CisgICAgfQorCisgICAgaW5saW5lIHVpbnQzMl90IEpTVmFsdWU6OnRvVUludDMyKEV4ZWNT
dGF0ZSogZXhlYykgY29uc3QKKyAgICB7CisgICAgICAgIC8vIFNlZSBjb21tZW50IG9uIEpTQzo6
dG9VSW50MzIsIGFib3ZlLgorICAgICAgICByZXR1cm4gdG9JbnQzMihleGVjKTsKKyAgICB9CisK
KyAgICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjppc1VJbnQzMigpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gaXNJbnQzMigpICYmIGFzSW50MzIoKSA+PSAwOworICAgIH0KKworICAgIGlubGlu
ZSB1aW50MzJfdCBKU1ZhbHVlOjphc1VJbnQzMigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NF
UlQoaXNVSW50MzIoKSk7CisgICAgICAgIHJldHVybiBhc0ludDMyKCk7CisgICAgfQorCisgICAg
aW5saW5lIGRvdWJsZSBKU1ZhbHVlOjphc051bWJlcigpIGNvbnN0CisgICAgeworICAgICAgICBB
U1NFUlQoaXNOdW1iZXIoKSk7CisgICAgICAgIHJldHVybiBpc0ludDMyKCkgPyBhc0ludDMyKCkg
OiBhc0RvdWJsZSgpOworICAgIH0KKworICAgIGlubGluZSBKU1ZhbHVlIGpzTmFOKCkKKyAgICB7
CisgICAgICAgIHJldHVybiBKU1ZhbHVlKHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVp
ZXRfTmFOKCkpOworICAgIH0KKworICAgIGlubGluZSBKU1ZhbHVlOjpKU1ZhbHVlKGNoYXIgaSkK
KyAgICB7CisgICAgICAgICp0aGlzID0gSlNWYWx1ZShzdGF0aWNfY2FzdDxpbnQzMl90PihpKSk7
CisgICAgfQorCisgICAgaW5saW5lIEpTVmFsdWU6OkpTVmFsdWUodW5zaWduZWQgY2hhciBpKQor
ICAgIHsKKyAgICAgICAgKnRoaXMgPSBKU1ZhbHVlKHN0YXRpY19jYXN0PGludDMyX3Q+KGkpKTsK
KyAgICB9CisKKyAgICBpbmxpbmUgSlNWYWx1ZTo6SlNWYWx1ZShzaG9ydCBpKQorICAgIHsKKyAg
ICAgICAgKnRoaXMgPSBKU1ZhbHVlKHN0YXRpY19jYXN0PGludDMyX3Q+KGkpKTsKKyAgICB9CisK
KyAgICBpbmxpbmUgSlNWYWx1ZTo6SlNWYWx1ZSh1bnNpZ25lZCBzaG9ydCBpKQorICAgIHsKKyAg
ICAgICAgKnRoaXMgPSBKU1ZhbHVlKHN0YXRpY19jYXN0PGludDMyX3Q+KGkpKTsKKyAgICB9CisK
KyAgICBpbmxpbmUgSlNWYWx1ZTo6SlNWYWx1ZSh1bnNpZ25lZCBpKQorICAgIHsKKyAgICAgICAg
aWYgKHN0YXRpY19jYXN0PGludDMyX3Q+KGkpIDwgMCkgeworICAgICAgICAgICAgKnRoaXMgPSBK
U1ZhbHVlKEVuY29kZUFzRG91YmxlLCBzdGF0aWNfY2FzdDxkb3VibGU+KGkpKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAqdGhpcyA9IEpTVmFsdWUoc3RhdGljX2Nh
c3Q8aW50MzJfdD4oaSkpOworICAgIH0KKworICAgIGlubGluZSBKU1ZhbHVlOjpKU1ZhbHVlKGxv
bmcgaSkKKyAgICB7CisgICAgICAgIGlmIChzdGF0aWNfY2FzdDxpbnQzMl90PihpKSAhPSBpKSB7
CisgICAgICAgICAgICAqdGhpcyA9IEpTVmFsdWUoRW5jb2RlQXNEb3VibGUsIHN0YXRpY19jYXN0
PGRvdWJsZT4oaSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgICp0
aGlzID0gSlNWYWx1ZShzdGF0aWNfY2FzdDxpbnQzMl90PihpKSk7CisgICAgfQorCisgICAgaW5s
aW5lIEpTVmFsdWU6OkpTVmFsdWUodW5zaWduZWQgbG9uZyBpKQorICAgIHsKKyAgICAgICAgaWYg
KHN0YXRpY19jYXN0PHVpbnQzMl90PihpKSAhPSBpKSB7CisgICAgICAgICAgICAqdGhpcyA9IEpT
VmFsdWUoRW5jb2RlQXNEb3VibGUsIHN0YXRpY19jYXN0PGRvdWJsZT4oaSkpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgICp0aGlzID0gSlNWYWx1ZShzdGF0aWNfY2Fz
dDx1aW50MzJfdD4oaSkpOworICAgIH0KKworICAgIGlubGluZSBKU1ZhbHVlOjpKU1ZhbHVlKGxv
bmcgbG9uZyBpKQorICAgIHsKKyAgICAgICAgaWYgKHN0YXRpY19jYXN0PGludDMyX3Q+KGkpICE9
IGkpIHsKKyAgICAgICAgICAgICp0aGlzID0gSlNWYWx1ZShFbmNvZGVBc0RvdWJsZSwgc3RhdGlj
X2Nhc3Q8ZG91YmxlPihpKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAg
ICAgKnRoaXMgPSBKU1ZhbHVlKHN0YXRpY19jYXN0PGludDMyX3Q+KGkpKTsKKyAgICB9CisKKyAg
ICBpbmxpbmUgSlNWYWx1ZTo6SlNWYWx1ZSh1bnNpZ25lZCBsb25nIGxvbmcgaSkKKyAgICB7Cisg
ICAgICAgIGlmIChzdGF0aWNfY2FzdDx1aW50MzJfdD4oaSkgIT0gaSkgeworICAgICAgICAgICAg
KnRoaXMgPSBKU1ZhbHVlKEVuY29kZUFzRG91YmxlLCBzdGF0aWNfY2FzdDxkb3VibGU+KGkpKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAqdGhpcyA9IEpTVmFsdWUo
c3RhdGljX2Nhc3Q8dWludDMyX3Q+KGkpKTsKKyAgICB9CisKKyAgICBpbmxpbmUgSlNWYWx1ZTo6
SlNWYWx1ZShkb3VibGUgZCkKKyAgICB7CisgICAgICAgIGNvbnN0IGludDMyX3QgYXNJbnQzMiA9
IHN0YXRpY19jYXN0PGludDMyX3Q+KGQpOworICAgICAgICBpZiAoYXNJbnQzMiAhPSBkIHx8ICgh
YXNJbnQzMiAmJiBzaWduYml0KGQpKSkgeyAvLyB0cnVlIGZvciAtMC4wCisgICAgICAgICAgICAq
dGhpcyA9IEpTVmFsdWUoRW5jb2RlQXNEb3VibGUsIGQpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgICp0aGlzID0gSlNWYWx1ZShzdGF0aWNfY2FzdDxpbnQzMl90Pihk
KSk7CisgICAgfQorCisgICAgaW5saW5lIEVuY29kZWRKU1ZhbHVlIEpTVmFsdWU6OmVuY29kZShK
U1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlLnUuYXNJbnQ2NDsKKyAg
ICB9CisKKyAgICBpbmxpbmUgSlNWYWx1ZSBKU1ZhbHVlOjpkZWNvZGUoRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZEpTVmFsdWUpCisgICAgeworICAgICAgICBKU1ZhbHVlIHY7CisgICAgICAgIHYudS5h
c0ludDY0ID0gZW5jb2RlZEpTVmFsdWU7CisgICAgICAgIHJldHVybiB2OworICAgIH0KKworI2lm
IFVTRShKU1ZBTFVFMzJfNjQpCisgICAgaW5saW5lIEpTVmFsdWU6OkpTVmFsdWUoKQorICAgIHsK
KyAgICAgICAgdS5hc0JpdHMudGFnID0gRW1wdHlWYWx1ZVRhZzsKKyAgICAgICAgdS5hc0JpdHMu
cGF5bG9hZCA9IDA7CisgICAgfQorCisgICAgaW5saW5lIEpTVmFsdWU6OkpTVmFsdWUoSlNOdWxs
VGFnKQorICAgIHsKKyAgICAgICAgdS5hc0JpdHMudGFnID0gTnVsbFRhZzsKKyAgICAgICAgdS5h
c0JpdHMucGF5bG9hZCA9IDA7CisgICAgfQorICAgIAorICAgIGlubGluZSBKU1ZhbHVlOjpKU1Zh
bHVlKEpTVW5kZWZpbmVkVGFnKQorICAgIHsKKyAgICAgICAgdS5hc0JpdHMudGFnID0gVW5kZWZp
bmVkVGFnOworICAgICAgICB1LmFzQml0cy5wYXlsb2FkID0gMDsKKyAgICB9CisgICAgCisgICAg
aW5saW5lIEpTVmFsdWU6OkpTVmFsdWUoSlNUcnVlVGFnKQorICAgIHsKKyAgICAgICAgdS5hc0Jp
dHMudGFnID0gQm9vbGVhblRhZzsKKyAgICAgICAgdS5hc0JpdHMucGF5bG9hZCA9IDE7CisgICAg
fQorICAgIAorICAgIGlubGluZSBKU1ZhbHVlOjpKU1ZhbHVlKEpTRmFsc2VUYWcpCisgICAgewor
ICAgICAgICB1LmFzQml0cy50YWcgPSBCb29sZWFuVGFnOworICAgICAgICB1LmFzQml0cy5wYXls
b2FkID0gMDsKKyAgICB9CisKKyAgICBpbmxpbmUgSlNWYWx1ZTo6SlNWYWx1ZShIYXNoVGFibGVE
ZWxldGVkVmFsdWVUYWcpCisgICAgeworICAgICAgICB1LmFzQml0cy50YWcgPSBEZWxldGVkVmFs
dWVUYWc7CisgICAgICAgIHUuYXNCaXRzLnBheWxvYWQgPSAwOworICAgIH0KKworICAgIGlubGlu
ZSBKU1ZhbHVlOjpKU1ZhbHVlKEpTQ2VsbCogcHRyKQorICAgIHsKKyAgICAgICAgaWYgKHB0cikK
KyAgICAgICAgICAgIHUuYXNCaXRzLnRhZyA9IENlbGxUYWc7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHUuYXNCaXRzLnRhZyA9IEVtcHR5VmFsdWVUYWc7CisgICAgICAgIHUuYXNCaXRzLnBh
eWxvYWQgPSByZWludGVycHJldF9jYXN0PGludDMyX3Q+KHB0cik7CisgICAgfQorCisgICAgaW5s
aW5lIEpTVmFsdWU6OkpTVmFsdWUoY29uc3QgSlNDZWxsKiBwdHIpCisgICAgeworICAgICAgICBp
ZiAocHRyKQorICAgICAgICAgICAgdS5hc0JpdHMudGFnID0gQ2VsbFRhZzsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgdS5hc0JpdHMudGFnID0gRW1wdHlWYWx1ZVRhZzsKKyAgICAgICAgdS5h
c0JpdHMucGF5bG9hZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50MzJfdD4oY29uc3RfY2FzdDxKU0Nl
bGwqPihwdHIpKTsKKyAgICB9CisKKyAgICBpbmxpbmUgSlNWYWx1ZTo6b3BlcmF0b3IgYm9vbCgp
IGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQodGFnKCkgIT0gRGVsZXRlZFZhbHVlVGFnKTsK
KyAgICAgICAgcmV0dXJuIHRhZygpICE9IEVtcHR5VmFsdWVUYWc7CisgICAgfQorCisgICAgaW5s
aW5lIGJvb2wgSlNWYWx1ZTo6b3BlcmF0b3I9PShjb25zdCBKU1ZhbHVlJiBvdGhlcikgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiB1LmFzSW50NjQgPT0gb3RoZXIudS5hc0ludDY0OworICAg
IH0KKworICAgIGlubGluZSBib29sIEpTVmFsdWU6Om9wZXJhdG9yIT0oY29uc3QgSlNWYWx1ZSYg
b3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdS5hc0ludDY0ICE9IG90aGVyLnUu
YXNJbnQ2NDsKKyAgICB9CisKKyAgICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjppc0VtcHR5KCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiB0YWcoKSA9PSBFbXB0eVZhbHVlVGFnOworICAgIH0K
KworICAgIGlubGluZSBib29sIEpTVmFsdWU6OmlzVW5kZWZpbmVkKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiB0YWcoKSA9PSBVbmRlZmluZWRUYWc7CisgICAgfQorCisgICAgaW5saW5l
IGJvb2wgSlNWYWx1ZTo6aXNOdWxsKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0YWco
KSA9PSBOdWxsVGFnOworICAgIH0KKworICAgIGlubGluZSBib29sIEpTVmFsdWU6OmlzVW5kZWZp
bmVkT3JOdWxsKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc1VuZGVmaW5lZCgpIHx8
IGlzTnVsbCgpOworICAgIH0KKworICAgIGlubGluZSBib29sIEpTVmFsdWU6OmlzQ2VsbCgpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gdGFnKCkgPT0gQ2VsbFRhZzsKKyAgICB9CisKKyAg
ICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjppc0ludDMyKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiB0YWcoKSA9PSBJbnQzMlRhZzsKKyAgICB9CisKKyAgICBpbmxpbmUgYm9vbCBKU1ZhbHVl
Ojppc0RvdWJsZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdGFnKCkgPCBMb3dlc3RU
YWc7CisgICAgfQorCisgICAgaW5saW5lIGJvb2wgSlNWYWx1ZTo6aXNUcnVlKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiB0YWcoKSA9PSBCb29sZWFuVGFnICYmIHBheWxvYWQoKTsKKyAg
ICB9CisKKyAgICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjppc0ZhbHNlKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiB0YWcoKSA9PSBCb29sZWFuVGFnICYmICFwYXlsb2FkKCk7CisgICAgfQor
CisgICAgaW5saW5lIHVpbnQzMl90IEpTVmFsdWU6OnRhZygpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gdS5hc0JpdHMudGFnOworICAgIH0KKyAgICAKKyAgICBpbmxpbmUgaW50MzJfdCBK
U1ZhbHVlOjpwYXlsb2FkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB1LmFzQml0cy5w
YXlsb2FkOworICAgIH0KKyAgICAKKyAgICBpbmxpbmUgaW50MzJfdCBKU1ZhbHVlOjphc0ludDMy
KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0ludDMyKCkpOworICAgICAgICByZXR1
cm4gdS5hc0JpdHMucGF5bG9hZDsKKyAgICB9CisgICAgCisgICAgaW5saW5lIGRvdWJsZSBKU1Zh
bHVlOjphc0RvdWJsZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNEb3VibGUoKSk7
CisgICAgICAgIHJldHVybiB1LmFzRG91YmxlOworICAgIH0KKyAgICAKKyAgICBBTFdBWVNfSU5M
SU5FIEpTQ2VsbCogSlNWYWx1ZTo6YXNDZWxsKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VS
VChpc0NlbGwoKSk7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEpTQ2VsbCo+KHUu
YXNCaXRzLnBheWxvYWQpOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZTo6SlNW
YWx1ZShFbmNvZGVBc0RvdWJsZVRhZywgZG91YmxlIGQpCisgICAgeworICAgICAgICB1LmFzRG91
YmxlID0gZDsKKyAgICB9CisKKyAgICBpbmxpbmUgSlNWYWx1ZTo6SlNWYWx1ZShpbnQgaSkKKyAg
ICB7CisgICAgICAgIHUuYXNCaXRzLnRhZyA9IEludDMyVGFnOworICAgICAgICB1LmFzQml0cy5w
YXlsb2FkID0gaTsKKyAgICB9CisKKyNpZiBFTkFCTEUoTExJTlRfQ19MT09QKQorICAgIGlubGlu
ZSBKU1ZhbHVlOjpKU1ZhbHVlKGludDMyX3QgdGFnLCBpbnQzMl90IHBheWxvYWQpCisgICAgewor
ICAgICAgICB1LmFzQml0cy50YWcgPSB0YWc7CisgICAgICAgIHUuYXNCaXRzLnBheWxvYWQgPSBw
YXlsb2FkOworICAgIH0KKyNlbmRpZgorCisgICAgaW5saW5lIGJvb2wgSlNWYWx1ZTo6aXNOdW1i
ZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzSW50MzIoKSB8fCBpc0RvdWJsZSgp
OworICAgIH0KKworICAgIGlubGluZSBib29sIEpTVmFsdWU6OmlzQm9vbGVhbigpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gaXNUcnVlKCkgfHwgaXNGYWxzZSgpOworICAgIH0KKworICAg
IGlubGluZSBib29sIEpTVmFsdWU6OmFzQm9vbGVhbigpIGNvbnN0CisgICAgeworICAgICAgICBB
U1NFUlQoaXNCb29sZWFuKCkpOworICAgICAgICByZXR1cm4gcGF5bG9hZCgpOworICAgIH0KKwor
I2Vsc2UgLy8gIVVTRShKU1ZBTFVFMzJfNjQpIGkuZS4gVVNFKEpTVkFMVUU2NCkKKworICAgIC8v
IDB4MCBjYW4gbmV2ZXIgb2NjdXIgbmF0dXJhbGx5IGJlY2F1c2UgaXQgaGFzIGEgdGFnIG9mIDAw
LCBpbmRpY2F0aW5nIGEgcG9pbnRlciB2YWx1ZSwgYnV0IGEgcGF5bG9hZCBvZiAweDAsIHdoaWNo
IGlzIGluIHRoZSAoaW52YWxpZCkgemVybyBwYWdlLgorICAgIGlubGluZSBKU1ZhbHVlOjpKU1Zh
bHVlKCkKKyAgICB7CisgICAgICAgIHUuYXNJbnQ2NCA9IFZhbHVlRW1wdHk7CisgICAgfQorCisg
ICAgLy8gMHg0IGNhbiBuZXZlciBvY2N1ciBuYXR1cmFsbHkgYmVjYXVzZSBpdCBoYXMgYSB0YWcg
b2YgMDAsIGluZGljYXRpbmcgYSBwb2ludGVyIHZhbHVlLCBidXQgYSBwYXlsb2FkIG9mIDB4NCwg
d2hpY2ggaXMgaW4gdGhlIChpbnZhbGlkKSB6ZXJvIHBhZ2UuCisgICAgaW5saW5lIEpTVmFsdWU6
OkpTVmFsdWUoSGFzaFRhYmxlRGVsZXRlZFZhbHVlVGFnKQorICAgIHsKKyAgICAgICAgdS5hc0lu
dDY0ID0gVmFsdWVEZWxldGVkOworICAgIH0KKworICAgIGlubGluZSBKU1ZhbHVlOjpKU1ZhbHVl
KEpTQ2VsbCogcHRyKQorICAgIHsKKyAgICAgICAgdS5hc0ludDY0ID0gcmVpbnRlcnByZXRfY2Fz
dDx1aW50cHRyX3Q+KHB0cik7CisgICAgfQorCisgICAgaW5saW5lIEpTVmFsdWU6OkpTVmFsdWUo
Y29uc3QgSlNDZWxsKiBwdHIpCisgICAgeworICAgICAgICB1LmFzSW50NjQgPSByZWludGVycHJl
dF9jYXN0PHVpbnRwdHJfdD4oY29uc3RfY2FzdDxKU0NlbGwqPihwdHIpKTsKKyAgICB9CisKKyAg
ICBpbmxpbmUgSlNWYWx1ZTo6b3BlcmF0b3IgYm9vbCgpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gdS5hc0ludDY0OworICAgIH0KKworICAgIGlubGluZSBib29sIEpTVmFsdWU6Om9wZXJh
dG9yPT0oY29uc3QgSlNWYWx1ZSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
dS5hc0ludDY0ID09IG90aGVyLnUuYXNJbnQ2NDsKKyAgICB9CisKKyAgICBpbmxpbmUgYm9vbCBK
U1ZhbHVlOjpvcGVyYXRvciE9KGNvbnN0IEpTVmFsdWUmIG90aGVyKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHUuYXNJbnQ2NCAhPSBvdGhlci51LmFzSW50NjQ7CisgICAgfQorCisgICAg
aW5saW5lIGJvb2wgSlNWYWx1ZTo6aXNFbXB0eSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gdS5hc0ludDY0ID09IFZhbHVlRW1wdHk7CisgICAgfQorCisgICAgaW5saW5lIGJvb2wgSlNW
YWx1ZTo6aXNVbmRlZmluZWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGFzVmFsdWUo
KSA9PSBKU1ZhbHVlKEpTVW5kZWZpbmVkKTsKKyAgICB9CisKKyAgICBpbmxpbmUgYm9vbCBKU1Zh
bHVlOjppc051bGwoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGFzVmFsdWUoKSA9PSBK
U1ZhbHVlKEpTTnVsbCk7CisgICAgfQorCisgICAgaW5saW5lIGJvb2wgSlNWYWx1ZTo6aXNUcnVl
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBhc1ZhbHVlKCkgPT0gSlNWYWx1ZShKU1Ry
dWUpOworICAgIH0KKworICAgIGlubGluZSBib29sIEpTVmFsdWU6OmlzRmFsc2UoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGFzVmFsdWUoKSA9PSBKU1ZhbHVlKEpTRmFsc2UpOworICAg
IH0KKworICAgIGlubGluZSBib29sIEpTVmFsdWU6OmFzQm9vbGVhbigpIGNvbnN0CisgICAgewor
ICAgICAgICBBU1NFUlQoaXNCb29sZWFuKCkpOworICAgICAgICByZXR1cm4gYXNWYWx1ZSgpID09
IEpTVmFsdWUoSlNUcnVlKTsKKyAgICB9CisKKyAgICBpbmxpbmUgaW50MzJfdCBKU1ZhbHVlOjph
c0ludDMyKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0ludDMyKCkpOworICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50MzJfdD4odS5hc0ludDY0KTsKKyAgICB9CisKKyAgICBp
bmxpbmUgYm9vbCBKU1ZhbHVlOjppc0RvdWJsZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gaXNOdW1iZXIoKSAmJiAhaXNJbnQzMigpOworICAgIH0KKworICAgIGlubGluZSBKU1ZhbHVl
OjpKU1ZhbHVlKEpTTnVsbFRhZykKKyAgICB7CisgICAgICAgIHUuYXNJbnQ2NCA9IFZhbHVlTnVs
bDsKKyAgICB9CisgICAgCisgICAgaW5saW5lIEpTVmFsdWU6OkpTVmFsdWUoSlNVbmRlZmluZWRU
YWcpCisgICAgeworICAgICAgICB1LmFzSW50NjQgPSBWYWx1ZVVuZGVmaW5lZDsKKyAgICB9CisK
KyAgICBpbmxpbmUgSlNWYWx1ZTo6SlNWYWx1ZShKU1RydWVUYWcpCisgICAgeworICAgICAgICB1
LmFzSW50NjQgPSBWYWx1ZVRydWU7CisgICAgfQorCisgICAgaW5saW5lIEpTVmFsdWU6OkpTVmFs
dWUoSlNGYWxzZVRhZykKKyAgICB7CisgICAgICAgIHUuYXNJbnQ2NCA9IFZhbHVlRmFsc2U7Cisg
ICAgfQorCisgICAgaW5saW5lIGJvb2wgSlNWYWx1ZTo6aXNVbmRlZmluZWRPck51bGwoKSBjb25z
dAorICAgIHsKKyAgICAgICAgLy8gVW5kZWZpbmVkIGFuZCBudWxsIHNoYXJlIHRoZSBzYW1lIHZh
bHVlLCBiYXIgdGhlICd1bmRlZmluZWQnIGJpdCBpbiB0aGUgZXh0ZW5kZWQgdGFnLgorICAgICAg
ICByZXR1cm4gKHUuYXNJbnQ2NCAmIH5UYWdCaXRVbmRlZmluZWQpID09IFZhbHVlTnVsbDsKKyAg
ICB9CisKKyAgICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjppc0Jvb2xlYW4oKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuICh1LmFzSW50NjQgJiB+MSkgPT0gVmFsdWVGYWxzZTsKKyAgICB9CisK
KyAgICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjppc0NlbGwoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuICEodS5hc0ludDY0ICYgVGFnTWFzayk7CisgICAgfQorCisgICAgaW5saW5lIGJvb2wg
SlNWYWx1ZTo6aXNJbnQzMigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gKHUuYXNJbnQ2
NCAmIFRhZ1R5cGVOdW1iZXIpID09IFRhZ1R5cGVOdW1iZXI7CisgICAgfQorCisgICAgaW5saW5l
IGludDY0X3QgcmVpbnRlcnByZXREb3VibGVUb0ludDY0KGRvdWJsZSB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8aW50NjRfdD4odmFsdWUpOworICAgIH0KKyAgICBp
bmxpbmUgZG91YmxlIHJlaW50ZXJwcmV0SW50NjRUb0RvdWJsZShpbnQ2NF90IHZhbHVlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxkb3VibGU+KHZhbHVlKTsKKyAgICB9CisK
KyAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWU6OkpTVmFsdWUoRW5jb2RlQXNEb3VibGVUYWcsIGRv
dWJsZSBkKQorICAgIHsKKyAgICAgICAgdS5hc0ludDY0ID0gcmVpbnRlcnByZXREb3VibGVUb0lu
dDY0KGQpICsgRG91YmxlRW5jb2RlT2Zmc2V0OworICAgIH0KKworICAgIGlubGluZSBKU1ZhbHVl
OjpKU1ZhbHVlKGludCBpKQorICAgIHsKKyAgICAgICAgdS5hc0ludDY0ID0gVGFnVHlwZU51bWJl
ciB8IHN0YXRpY19jYXN0PHVpbnQzMl90PihpKTsKKyAgICB9CisKKyAgICBpbmxpbmUgZG91Ymxl
IEpTVmFsdWU6OmFzRG91YmxlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0RvdWJs
ZSgpKTsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0SW50NjRUb0RvdWJsZSh1LmFzSW50NjQg
LSBEb3VibGVFbmNvZGVPZmZzZXQpOworICAgIH0KKworICAgIGlubGluZSBib29sIEpTVmFsdWU6
OmlzTnVtYmVyKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB1LmFzSW50NjQgJiBUYWdU
eXBlTnVtYmVyOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgSlNDZWxsKiBKU1ZhbHVlOjph
c0NlbGwoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzQ2VsbCgpKTsKKyAgICAgICAg
cmV0dXJuIHUucHRyOworICAgIH0KKworI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpCisKK30gLy8g
bmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNWYWx1ZUlubGluZU1ldGhvZHNfaApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZUlubGluZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlSW5saW5lcy5oCShyZXZp
c2lvbiAxMzMzODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlSW5s
aW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw4ICsyMyw4IEBACiAgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
ICAqLwogCi0jaWZuZGVmIEpTVmFsdWVJbmxpbmVNZXRob2RzX2gKLSNkZWZpbmUgSlNWYWx1ZUlu
bGluZU1ldGhvZHNfaAorI2lmbmRlZiBKU1ZhbHVlSW5saW5lc19oCisjZGVmaW5lIEpTVmFsdWVJ
bmxpbmVzX2gKIAogI2luY2x1ZGUgIkpTVmFsdWUuaCIKIApAQCAtNDkzLDQgKzQ5Myw0IEBAIG5h
bWVzcGFjZSBKU0MgewogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAotI2VuZGlmIC8vIEpTVmFsdWVJ
bmxpbmVNZXRob2RzX2gKKyNlbmRpZiAvLyBKU1ZhbHVlSW5saW5lc19oCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9MaXRlcmFsUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MaXRlcmFsUGFyc2VyLmNwcAkocmV2aXNpb24g
MTMzMzkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGl0ZXJhbFBhcnNlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDggKzI3LDggQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJMaXRlcmFsUGFyc2VyLmgiCiAKLSNpbmNsdWRlICJCdXR0ZXJmbHlJbmxpbmVN
ZXRob2RzLmgiCi0jaW5jbHVkZSAiQ29waWVkU3BhY2VJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVk
ZSAiQnV0dGVyZmx5SW5saW5lcy5oIgorI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lcy5oIgog
I2luY2x1ZGUgIkpTQXJyYXkuaCIKICNpbmNsdWRlICJKU1N0cmluZy5oIgogI2luY2x1ZGUgIkxl
eGVyLmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1
Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2Jq
ZWN0Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAxMzMzOTIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIx
LDggKzIxLDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJPYmplY3RDb25zdHJ1
Y3Rvci5oIgogCi0jaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oIgotI2luY2x1ZGUg
IkNvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkJ1dHRlcmZseUlubGluZXMu
aCIKKyNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZXMuaCIKICNpbmNsdWRlICJFcnJvci5oIgog
I2luY2x1ZGUgIkV4Y2VwdGlvbkhlbHBlcnMuaCIKICNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5oCShyZXZpc2lv
biAxMzMzOTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDcgQEAKICNpbmNsdWRlICJFeGNlcHRpb25IZWxw
ZXJzLmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJKU1N0cmluZy5oIgot
I2luY2x1ZGUgIkpTVmFsdWVJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiSlNWYWx1ZUlubGlu
ZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmNwcAkocmV2aXNpb24gMTMzMzky
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIlJlZ0V4cE1hdGNoZXNBcnJheS5oIgogCi0jaW5jbHVkZSAiQnV0dGVyZmx5SW5s
aW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkJ1dHRlcmZseUlubGluZXMuaCIKIAogbmFtZXNwYWNl
IEpTQyB7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVj
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhw
T2JqZWN0LmNwcAkocmV2aXNpb24gMTMzMzkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEsOCArMjEsOCBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlJlZ0V4cE9iamVjdC5oIgogCi0jaW5jbHVk
ZSAiQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oIgotI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5l
TWV0aG9kcy5oIgorI2luY2x1ZGUgIkJ1dHRlcmZseUlubGluZXMuaCIKKyNpbmNsdWRlICJDb3Bp
ZWRTcGFjZUlubGluZXMuaCIKICNpbmNsdWRlICJFcnJvci5oIgogI2luY2x1ZGUgIkV4Y2VwdGlv
bkhlbHBlcnMuaCIKICNpbmNsdWRlICJKU0FycmF5LmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAJKHJldmlzaW9uIDEzMzM5
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIyLDkgKzIyLDkgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJTdHJpbmdQcm90b3R5cGUuaCIKIAotI2luY2x1ZGUgIkJ1dHRlcmZseUlubGluZU1l
dGhvZHMuaCIKKyNpbmNsdWRlICJCdXR0ZXJmbHlJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ2FjaGVk
Q2FsbC5oIgotI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUg
IkNvcGllZFNwYWNlSW5saW5lcy5oIgogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiRXhl
Y3V0YWJsZS5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmgiCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxMzMzOTIpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSw1MCBAQAorMjAxMi0xMS0wMyAgTWFyayBMYW0gIDxtYXJr
LmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAgUmVuYW1lZCAuLi5JbmxpbmVNZXRob2RzLmggZmls
ZXMgdG8gLi4uSW5saW5lcy5oLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTAxMTQ1LgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFRoaXMgaXMgb25seSBhIHJlZmFjdG9yaW5nIGVmZm9ydCB0byByZW5hbWUg
dGhlIGZpbGVzLiBUaGVyZSBhcmUgbm8KKyAgICAgICAgZnVuY3Rpb25hbGl0eSBjaGFuZ2VzLgor
CisgICAgICAgIE5vIG5ldyB0ZXN0cy4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06
CisgICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAg
ICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGRvbS9Nb3VzZVJlbGF0ZWRFdmVudC5o
OgorICAgICAgICAqIGRvbS9Ub3VjaC5oOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxFbnRp
dHlQYXJzZXIuY3BwOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxUb2tlbml6ZXIuY3BwOgor
ICAgICAgICAqIGh0bWwvdHJhY2svV2ViVlRUVG9rZW5pemVyLmNwcDoKKyAgICAgICAgKiBpbnNw
ZWN0b3IvVGltZWxpbmVSZWNvcmRGYWN0b3J5LmNwcDoKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUv
Q2FjaGVkSW1hZ2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVy
LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtU3RhdGUuaDoKKyAgICAg
ICAgKiByZW5kZXJpbmcvQ29sdW1uSW5mby5oOgorICAgICAgICAqIHJlbmRlcmluZy9FeGNsdXNp
b25TaGFwZUluc2lkZUluZm8uaDoKKyAgICAgICAgKiByZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVu
ZGVyZXIuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5oOgorICAgICAgICAq
IHJlbmRlcmluZy9MYXlvdXRSZXBhaW50ZXIuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvTGF5b3V0
VHlwZXNJbmxpbmVNZXRob2RzLmg6IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL0xheW91
dFR5cGVzSW5saW5lcy5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5
b3V0VHlwZXNJbmxpbmVNZXRob2RzLmguCisgICAgICAgICogcmVuZGVyaW5nL1BhaW50SW5mby5o
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5oOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJHZW9tZXRyeU1hcC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJJbWFnZVJlc291cmNlLmg6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxl
Lmg6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1NoYWRvd0RhdGEuY3BwOgorICAgICAgICAq
IHhtbC9wYXJzZXIvQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VySW5saW5lTWV0aG9kcy5oOiBSZW1v
dmVkLgorICAgICAgICAqIHhtbC9wYXJzZXIvQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VySW5saW5l
cy5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL0NoYXJhY3RlclJlZmVy
ZW5jZVBhcnNlcklubGluZU1ldGhvZHMuaC4KKyAgICAgICAgKiB4bWwvcGFyc2VyL01hcmt1cFRv
a2VuaXplcklubGluZU1ldGhvZHMuaDogUmVtb3ZlZC4KKyAgICAgICAgKiB4bWwvcGFyc2VyL01h
cmt1cFRva2VuaXplcklubGluZXMuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUveG1sL3Bh
cnNlci9NYXJrdXBUb2tlbml6ZXJJbmxpbmVNZXRob2RzLmguCisgICAgICAgICogeG1sL3BhcnNl
ci9YTUxDaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXIuY3BwOgorICAgICAgICAqIHhtbC9wYXJzZXIv
WE1MVG9rZW5pemVyLmNwcDoKKwogMjAxMi0xMS0wMiAgU2hpbnlhIEthd2FuYWthICA8c2hpbnlh
a0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW1NoYWRvd10gU2hhZG93Um9vdCBzaG91bGQgYmUg
YWJsZSB0byBrbm93IHRoZSBleGlzdGVuY2Ugb2YgPGNvbnRlbnQ+CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0dO
VW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDEzMzM5MikKKysrIFNvdXJjZS9XZWJDb3JlL0dO
VW1ha2VmaWxlLmxpc3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTQ5OTAsNyArNDk5MCw3IEBAIHdl
YmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFN0YXRl
LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFN0YXRlLmggXAogCVNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRUeXBlcy5oIFwKLQlTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvTGF5b3V0VHlwZXNJbmxpbmVNZXRob2RzLmggXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9MYXlvdXRUeXBlc0lubGluZXMuaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xh
eW91dFJlcGFpbnRlci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0UmVwYWlu
dGVyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL092ZXJsYXBUZXN0UmVxdWVzdENs
aWVudC5oIFwKQEAgLTU4MjQsMTAgKzU4MjQsMTAgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlT
b3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlclNjcmlwdExvYWRlci5oIFwKIAlTb3VyY2UvV2Vi
Q29yZS93b3JrZXJzL1dvcmtlclRocmVhZC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3dvcmtlcnMv
V29ya2VyVGhyZWFkLmggXAotCVNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvQ2hhcmFjdGVyUmVm
ZXJlbmNlUGFyc2VySW5saW5lTWV0aG9kcy5oIFwKKwlTb3VyY2UvV2ViQ29yZS94bWwvcGFyc2Vy
L0NoYXJhY3RlclJlZmVyZW5jZVBhcnNlcklubGluZXMuaCBcCiAJU291cmNlL1dlYkNvcmUveG1s
L3BhcnNlci9NYXJrdXBUb2tlbkJhc2UuaCBcCiAJU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9N
YXJrdXBUb2tlbml6ZXJCYXNlLmggXAotCVNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvTWFya3Vw
VG9rZW5pemVySW5saW5lTWV0aG9kcy5oIFwKKwlTb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL01h
cmt1cFRva2VuaXplcklubGluZXMuaCBcCiAJU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9OZXdY
TUxEb2N1bWVudFBhcnNlci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvTmV3WE1M
RG9jdW1lbnRQYXJzZXIuaCBcCiAJU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxDaGFyYWN0
ZXJSZWZlcmVuY2VQYXJzZXIuY3BwIFwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQkocmV2aXNpb24gMTMzMzky
KQorKysgU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQkod29ya2luZyBjb3B5KQpAQCAtMjczNSwx
MCArMjczNSwxMCBAQCBIRUFERVJTICs9IFwKICAgICB3b3JrZXJzL1dvcmtlclJ1bkxvb3AuaCBc
CiAgICAgd29ya2Vycy9Xb3JrZXJTY3JpcHRMb2FkZXIuaCBcCiAgICAgd29ya2Vycy9Xb3JrZXJU
aHJlYWQuaCBcCi0gICAgeG1sL3BhcnNlci9DaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXJJbmxpbmVN
ZXRob2RzLmggXAorICAgIHhtbC9wYXJzZXIvQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VySW5saW5l
cy5oIFwKICAgICB4bWwvcGFyc2VyL01hcmt1cFRva2VuQmFzZS5oIFwKICAgICB4bWwvcGFyc2Vy
L01hcmt1cFRva2VuaXplckJhc2UuaCBcCi0gICAgeG1sL3BhcnNlci9NYXJrdXBUb2tlbml6ZXJJ
bmxpbmVNZXRob2RzLmggXAorICAgIHhtbC9wYXJzZXIvTWFya3VwVG9rZW5pemVySW5saW5lcy5o
IFwKICAgICB4bWwvcGFyc2VyL05ld1hNTERvY3VtZW50UGFyc2VyLmggXAogICAgIHhtbC9wYXJz
ZXIvWE1MQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VyLmggXAogICAgIHhtbC9wYXJzZXIvWE1MRG9j
dW1lbnRQYXJzZXIuaCBcCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiAxMzMzOTIpCisr
KyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTU1OSw3ICs1
NTksNyBAQAogICAgICAgICAgICAgJ3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmgnLAogICAgICAg
ICAgICAgJ3JlbmRlcmluZy9MYXlvdXRTdGF0ZS5oJywKICAgICAgICAgICAgICdyZW5kZXJpbmcv
TGF5b3V0VHlwZXMuaCcsCi0gICAgICAgICAgICAncmVuZGVyaW5nL0xheW91dFR5cGVzSW5saW5l
TWV0aG9kcy5oJywKKyAgICAgICAgICAgICdyZW5kZXJpbmcvTGF5b3V0VHlwZXNJbmxpbmVzLmgn
LAogICAgICAgICAgICAgJ3JlbmRlcmluZy9MYXlvdXRSZXBhaW50ZXIuaCcsCiAgICAgICAgICAg
ICAncmVuZGVyaW5nL092ZXJsYXBUZXN0UmVxdWVzdENsaWVudC5oJywKICAgICAgICAgICAgICdy
ZW5kZXJpbmcvUGFnaW5hdGlvbi5oJywKQEAgLTM2NzUsMTAgKzM2NzUsMTAgQEAKICAgICAgICAg
ICAgICd3b3JrZXJzL1dvcmtlclNjcmlwdExvYWRlci5oJywKICAgICAgICAgICAgICd3b3JrZXJz
L1dvcmtlclNjcmlwdExvYWRlckNsaWVudC5oJywKICAgICAgICAgICAgICd3b3JrZXJzL1dvcmtl
clRocmVhZC5jcHAnLAotICAgICAgICAgICAgJ3htbC9wYXJzZXIvQ2hhcmFjdGVyUmVmZXJlbmNl
UGFyc2VySW5saW5lTWV0aG9kcy5oJywKKyAgICAgICAgICAgICd4bWwvcGFyc2VyL0NoYXJhY3Rl
clJlZmVyZW5jZVBhcnNlcklubGluZXMuaCcsCiAgICAgICAgICAgICAneG1sL3BhcnNlci9NYXJr
dXBUb2tlbkJhc2UuaCcsCiAgICAgICAgICAgICAneG1sL3BhcnNlci9NYXJrdXBUb2tlbml6ZXJC
YXNlLmgnLAotICAgICAgICAgICAgJ3htbC9wYXJzZXIvTWFya3VwVG9rZW5pemVySW5saW5lTWV0
aG9kcy5oJywKKyAgICAgICAgICAgICd4bWwvcGFyc2VyL01hcmt1cFRva2VuaXplcklubGluZXMu
aCcsCiAgICAgICAgICAgICAneG1sL3BhcnNlci9OZXdYTUxEb2N1bWVudFBhcnNlci5jcHAnLAog
ICAgICAgICAgICAgJ3htbC9wYXJzZXIvTmV3WE1MRG9jdW1lbnRQYXJzZXIuaCcsCiAgICAgICAg
ICAgICAneG1sL3BhcnNlci9YTUxDaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXIuY3BwJywKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lv
biAxMzMzOTIpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJv
agkod29ya2luZyBjb3B5KQpAQCAtNDgzOTAsNyArNDgzOTAsNyBAQAogCQkJCU5hbWU9InBhcnNl
ciIKIAkJCQk+CiAJCQkJPEZpbGUKLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlx4bWxccGFyc2VyXENo
YXJhY3RlclJlZmVyZW5jZUlubGluZU1ldGhvZHMuaCIKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlx4
bWxccGFyc2VyXENoYXJhY3RlclJlZmVyZW5jZUlubGluZXMuaCIKIAkJCQkJPgogCQkJCTwvRmls
ZT4KIAkJCQk8RmlsZQpAQCAtNDg0MDIsNyArNDg0MDIsNyBAQAogCQkJCQk+CiAJCQkJPC9GaWxl
PgogCQkJCTxGaWxlCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5ceG1sXHBhcnNlclxNYXJrdXBUb2tl
bml6ZXJJbmxpbmVNZXRob2RzLmgiCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ceG1sXHBhcnNlclxN
YXJrdXBUb2tlbml6ZXJJbmxpbmVzLmgiCiAJCQkJCT4KIAkJCQk8L0ZpbGU+CiAJCQkJPEZpbGUK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHJldmlzaW9uIDEzMzM5MikKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQAogLyog
RW5kIFBCWEFnZ3JlZ2F0ZVRhcmdldCBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWEJ1aWxkRmls
ZSBzZWN0aW9uICovCi0JCTAwMDIyRTY5MTNDRTFCQkEwMDI4MkQ1QiAvKiBDaGFyYWN0ZXJSZWZl
cmVuY2VQYXJzZXJJbmxpbmVNZXRob2RzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwMDAyMkU2ODEzQ0UxQkJBMDAyODJENUIgLyogQ2hhcmFjdGVyUmVm
ZXJlbmNlUGFyc2VySW5saW5lTWV0aG9kcy5oICovOyB9OworCQkwMDAyMkU2OTEzQ0UxQkJBMDAy
ODJENUIgLyogQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VySW5saW5lcy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDAwMjJFNjgxM0NFMUJCQTAwMjgyRDVC
IC8qIENoYXJhY3RlclJlZmVyZW5jZVBhcnNlcklubGluZXMuaCAqLzsgfTsKIAkJMDAwMkVDNTgx
M0MzRjY3RDAwMDQwRDQ3IC8qIFhNTFRva2VuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwMDAyRUM1NTEzQzNGNjdEMDAwNDBENDcgLyogWE1MVG9rZW4u
aCAqLzsgfTsKIAkJMDAwMkVDNTkxM0MzRjY3RDAwMDQwRDQ3IC8qIFhNTFRva2VuaXplci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwMDAyRUM1NjEz
QzNGNjdEMDAwNDBENDcgLyogWE1MVG9rZW5pemVyLmNwcCAqLzsgfTsKIAkJMDAwMkVDNUExM0Mz
RjY3RDAwMDQwRDQ3IC8qIFhNTFRva2VuaXplci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMDAwMkVDNTcxM0MzRjY3RDAwMDQwRDQ3IC8qIFhNTFRva2Vu
aXplci5oICovOyB9OwpAQCAtNjAsNyArNjAsNyBAQAogCQkwMEI5MzE4OTEzQkE4REJDMDAzNUE5
NDggLyogWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDAwQjkzMTgzMTNCQTg2N0YwMDM1QTk0OCAvKiBYTUxE
b2N1bWVudFBhcnNlckxpYnhtbDIuY3BwICovOyB9OwogCQkwMEI5MzE4QjEzQkE4REM5MDAzNUE5
NDggLyogWE1MRG9jdW1lbnRQYXJzZXJTY29wZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwMEI5MzE4NTEzQkE4NjdGMDAzNUE5NDggLyogWE1MRG9j
dW1lbnRQYXJzZXJTY29wZS5jcHAgKi87IH07CiAJCTAwQjkzMThDMTNCQThEQ0MwMDM1QTk0OCAv
KiBYTUxEb2N1bWVudFBhcnNlclNjb3BlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwMEI5MzE4NjEzQkE4NjdGMDAzNUE5NDggLyogWE1MRG9jdW1lbnRQ
YXJzZXJTY29wZS5oICovOyB9OwotCQkwMEM2MEUzRjEzRDc2RDdFMDA5MkEyNzUgLyogTWFya3Vw
VG9rZW5pemVySW5saW5lTWV0aG9kcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMDBDNjBFM0UxM0Q3NkQ3RTAwOTJBMjc1IC8qIE1hcmt1cFRva2VuaXpl
cklubGluZU1ldGhvZHMuaCAqLzsgfTsKKwkJMDBDNjBFM0YxM0Q3NkQ3RTAwOTJBMjc1IC8qIE1h
cmt1cFRva2VuaXplcklubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDAwQzYwRTNFMTNENzZEN0UwMDkyQTI3NSAvKiBNYXJrdXBUb2tlbml6ZXJJ
bmxpbmVzLmggKi87IH07CiAJCTAwQzYwRTQyMTNENzk3QUUwMDkyQTI3NSAvKiBNYXJrdXBUb2tl
bml6ZXJCYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwMEM2MEU0MTEzRDc5N0FFMDA5MkEyNzUgLyogTWFya3VwVG9rZW5pemVyQmFzZS5oICovOyB9
OwogCQkwMENBOTNCMjEzQzY2OTE2MDBGN0ZFOTUgLyogTmV3WE1MRG9jdW1lbnRQYXJzZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDAwQ0E5M0IxMTND
NjY5MTYwMEY3RkU5NSAvKiBOZXdYTUxEb2N1bWVudFBhcnNlci5oICovOyB9OwogCQkwMENBOTNC
NTEzQzY2OTdDMDBGN0ZFOTUgLyogTmV3WE1MRG9jdW1lbnRQYXJzZXIuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDBDQTkzQjQxM0M2Njk3QzAwRjdG
RTk1IC8qIE5ld1hNTERvY3VtZW50UGFyc2VyLmNwcCAqLzsgfTsKQEAgLTkyMyw3ICs5MjMsNyBA
QAogCQkzMTlFNjlCNTEzMjk5QkJEMDA0QUM5MUEgLyogV2ViS2l0QW5pbWF0aW9uTGlzdC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTlFNjlBRjEz
Mjk5QkJEMDA0QUM5MUEgLyogV2ViS2l0QW5pbWF0aW9uTGlzdC5jcHAgKi87IH07CiAJCTMxOUU2
OUI2MTMyOTlCQkQwMDRBQzkxQSAvKiBXZWJLaXRBbmltYXRpb25MaXN0LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTlFNjlCMDEzMjk5QkJEMDA0QUM5
MUEgLyogV2ViS2l0QW5pbWF0aW9uTGlzdC5oICovOyB9OwogCQkzMTlGQkQ1RjE1RDJGNDY0MDA5
NjQwQTYgLyogQ2FjaGVkSW1hZ2VDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDMxOUZCRDVEMTVEMkY0NDQwMDk2NDBBNiAvKiBDYWNoZWRJbWFn
ZUNsaWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
Ci0JCTMxQjgwMUJCMTVFQzU4QzcwMENFNjQzRCAvKiBMYXlvdXRUeXBlc0lubGluZU1ldGhvZHMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0ODk0Q0E4
MTVFQzQ4OTcwMEE0MDQ4MSAvKiBMYXlvdXRUeXBlc0lubGluZU1ldGhvZHMuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkzMUI4MDFCQjE1RUM1OEM3
MDBDRTY0M0QgLyogTGF5b3V0VHlwZXNJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDg5NENBODE1RUM0ODk3MDBBNDA0ODEgLyogTGF5b3V0
VHlwZXNJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMzFDMEZGMjEwRTRDRUI2RTAwN0Q2RkU1IC8qIFdlYktpdEFuaW1hdGlvbkV2ZW50
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxQzBG
RjFCMEU0Q0VCNkUwMDdENkZFNSAvKiBXZWJLaXRBbmltYXRpb25FdmVudC5jcHAgKi87IH07CiAJ
CTMxQzBGRjIyMEU0Q0VCNkUwMDdENkZFNSAvKiBXZWJLaXRBbmltYXRpb25FdmVudC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzFDMEZGMUMwRTRDRUI2
RTAwN0Q2RkU1IC8qIFdlYktpdEFuaW1hdGlvbkV2ZW50LmggKi87IH07CiAJCTMxQzBGRjI0MEU0
Q0VCNkUwMDdENkZFNSAvKiBXZWJLaXRUcmFuc2l0aW9uRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzFDMEZGMUUwRTRDRUI2RTAwN0Q2RkU1
IC8qIFdlYktpdFRyYW5zaXRpb25FdmVudC5jcHAgKi87IH07CkBAIC03MDkwLDcgKzcwOTAsNyBA
QAogLyogRW5kIFBCWENvcHlGaWxlc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQ
QlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KLQkJMDAwMjJFNjgxM0NFMUJCQTAwMjgyRDVCIC8q
IENoYXJhY3RlclJlZmVyZW5jZVBhcnNlcklubGluZU1ldGhvZHMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VySW5saW5lTWV0aG9kcy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwMDAyMkU2ODEzQ0UxQkJBMDAyODJENUIg
LyogQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VySW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBDaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXJJbmxpbmVzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTAwMDJFQzU1MTNDM0Y2N0QwMDA0MEQ0NyAvKiBYTUxUb2tl
bi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBYTUxUb2tlbi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwMDAyRUM1NjEzQzNGNjdEMDAwNDBENDcgLyogWE1MVG9r
ZW5pemVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFhNTFRva2Vu
aXplci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTAwMDJFQzU3MTNDM0Y2N0Qw
MDA0MEQ0NyAvKiBYTUxUb2tlbml6ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gWE1MVG9rZW5pemVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03MTA1LDcg
KzcxMDUsNyBAQAogCQkwMEI5MzE4MzEzQkE4NjdGMDAzNUE5NDggLyogWE1MRG9jdW1lbnRQYXJz
ZXJMaWJ4bWwyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFhNTERv
Y3VtZW50UGFyc2VyTGlieG1sMi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTAw
QjkzMTg1MTNCQTg2N0YwMDM1QTk0OCAvKiBYTUxEb2N1bWVudFBhcnNlclNjb3BlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFhNTERvY3VtZW50UGFyc2VyU2NvcGUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwMEI5MzE4NjEzQkE4NjdGMDAzNUE5
NDggLyogWE1MRG9jdW1lbnRQYXJzZXJTY29wZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBYTUxEb2N1bWVudFBhcnNlclNjb3BlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTAwQzYwRTNFMTNENzZEN0UwMDkyQTI3NSAvKiBNYXJrdXBUb2tlbml6ZXJJbmxpbmVN
ZXRob2RzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hcmt1cFRva2VuaXpl
cklubGluZU1ldGhvZHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMDBDNjBFM0Ux
M0Q3NkQ3RTAwOTJBMjc1IC8qIE1hcmt1cFRva2VuaXplcklubGluZXMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gTWFya3VwVG9rZW5pemVySW5saW5lcy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwMEM2MEU0MTEzRDc5N0FFMDA5MkEyNzUgLyogTWFya3VwVG9r
ZW5pemVyQmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYXJrdXBUb2tl
bml6ZXJCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTAwQ0E5M0IxMTNDNjY5
MTYwMEY3RkU5NSAvKiBOZXdYTUxEb2N1bWVudFBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBOZXdYTUxEb2N1bWVudFBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwMENBOTNCNDEzQzY2OTdDMDBGN0ZFOTUgLyogTmV3WE1MRG9jdW1lbnRQYXJz
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTmV3WE1MRG9jdW1l
bnRQYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTM3OCw3ICs5Mzc4
LDcgQEAKIAkJODQ4NTIyODcxMTkwMTczQzAwNkVEQzdGIC8qIFNWR1ZLZXJuRWxlbWVudC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdWS2VybkVsZW1lbnQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NDg1MjI4ODExOTAxNzNDMDA2RURDN0Yg
LyogU1ZHVktlcm5FbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNW
R1ZLZXJuRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NDg1MjI4OTEx
OTAxNzNDMDA2RURDN0YgLyogU1ZHVktlcm5FbGVtZW50LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBh
dGggPSBTVkdWS2VybkVsZW1lbnQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk4
NDg5NENBODE1RUM0ODk3MDBBNDA0ODEgLyogTGF5b3V0VHlwZXNJbmxpbmVNZXRob2RzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExheW91dFR5cGVzSW5saW5lTWV0aG9kcy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4NDg5NENBODE1RUM0ODk3MDBBNDA0ODEg
LyogTGF5b3V0VHlwZXNJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IExheW91dFR5cGVzSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NDlG
Nzc3NTBFRkVDNjIwMDA5MDg0OUQgLyogU3Ryb2tlU3R5bGVBcHBsaWVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cm9rZVN0eWxlQXBwbGllci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk4NEE4MUYzQjBGQzdERkYwMDA5NTUzMDAgLyogU291cmNlQWxwaGEu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gU291cmNlQWxwaGEuY3Bw
OyBwYXRoID0gZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTg0QTgxRjNDMEZDN0RGRjAwMDk1NTMwMCAvKiBTb3VyY2VBbHBoYS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBTb3VyY2VBbHBoYS5oOyBwYXRoID0gZmlsdGVycy9T
b3VyY2VBbHBoYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTQxMzAsMTAgKzE0
MTMwLDEwIEBACiAJCTAwQjkzMTgwMTNCQTg2N0YwMDM1QTk0OCAvKiBwYXJzZXIgKi8gPSB7CiAJ
CQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTAwMDIyRTY4MTNDRTFCQkEw
MDI4MkQ1QiAvKiBDaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXJJbmxpbmVNZXRob2RzLmggKi8sCisJ
CQkJMDAwMjJFNjgxM0NFMUJCQTAwMjgyRDVCIC8qIENoYXJhY3RlclJlZmVyZW5jZVBhcnNlcklu
bGluZXMuaCAqLywKIAkJCQkwMEE2MjlDMDEzRDBCRUM3MDA1MEFDNTIgLyogTWFya3VwVG9rZW5C
YXNlLmggKi8sCiAJCQkJMDBDNjBFNDExM0Q3OTdBRTAwOTJBMjc1IC8qIE1hcmt1cFRva2VuaXpl
ckJhc2UuaCAqLywKLQkJCQkwMEM2MEUzRTEzRDc2RDdFMDA5MkEyNzUgLyogTWFya3VwVG9rZW5p
emVySW5saW5lTWV0aG9kcy5oICovLAorCQkJCTAwQzYwRTNFMTNENzZEN0UwMDkyQTI3NSAvKiBN
YXJrdXBUb2tlbml6ZXJJbmxpbmVzLmggKi8sCiAJCQkJMDBDQTkzQjQxM0M2Njk3QzAwRjdGRTk1
IC8qIE5ld1hNTERvY3VtZW50UGFyc2VyLmNwcCAqLywKIAkJCQkwMENBOTNCMTEzQzY2OTE2MDBG
N0ZFOTUgLyogTmV3WE1MRG9jdW1lbnRQYXJzZXIuaCAqLywKIAkJCQkwMEQwNDY0ODEzQzREMTQ1
MDAzMjZGQ0MgLyogWE1MQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VyLmNwcCAqLywKQEAgLTIxNDU0
LDcgKzIxNDU0LDcgQEAKIAkJCQkyRDkwNjYwNDBCRTE0MUQ0MDA5NTY5OTggLyogTGF5b3V0U3Rh
dGUuY3BwICovLAogCQkJCTJEOTA2NjA1MEJFMTQxRDQwMDk1Njk5OCAvKiBMYXlvdXRTdGF0ZS5o
ICovLAogCQkJCUJBQ0YyOTAwMTNCMkEwRDUwMDc4MUY5MCAvKiBMYXlvdXRUeXBlcy5oICovLAot
CQkJCTg0ODk0Q0E4MTVFQzQ4OTcwMEE0MDQ4MSAvKiBMYXlvdXRUeXBlc0lubGluZU1ldGhvZHMu
aCAqLywKKwkJCQk4NDg5NENBODE1RUM0ODk3MDBBNDA0ODEgLyogTGF5b3V0VHlwZXNJbmxpbmVz
LmggKi8sCiAJCQkJMzc3NEFCQTMwRkEyMUVCNDAwQUQ3REU5IC8qIE92ZXJsYXBUZXN0UmVxdWVz
dENsaWVudC5oICovLAogCQkJCTkzNzdBQjlGMTVERUZFRUYwMDMxRkQwNCAvKiBQYWdpbmF0aW9u
LmggKi8sCiAJCQkJMDg4NTA2N0QxMURBMDQ1QjAwMTgyQjk4IC8qIFBhaW50SW5mby5oICovLApA
QCAtMjI1NTQsNyArMjI1NTQsNyBAQAogCQkJCUZEMzE1RkZGMTJCMDI2NzYwMEMxQTM1OSAvKiBD
aGFubmVsTWVyZ2VyTm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkQzMTYwMDIxMkIwMjY3NjAw
QzFBMzU5IC8qIENoYW5uZWxTcGxpdHRlck5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTY1NTBC
NkEwMDk5REYwMjcwMDkwRDc4MSAvKiBDaGFyYWN0ZXJEYXRhLmggaW4gSGVhZGVycyAqLywKLQkJ
CQkwMDAyMkU2OTEzQ0UxQkJBMDAyODJENUIgLyogQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VySW5s
aW5lTWV0aG9kcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMDAwMjJFNjkxM0NFMUJCQTAwMjgyRDVC
IC8qIENoYXJhY3RlclJlZmVyZW5jZVBhcnNlcklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUIyQzNEQTJBMEQwMDZDMUQwMEVGNkYyNiAvKiBDaGFyc2V0RGF0YS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJRjU1QjNEQjIxMjUxRjEyRDAwM0VGMjY5IC8qIENoZWNrYm94SW5wdXRUeXBlLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBMDBCNzIxQTExREU2NDI4MDA4QUI5RkYgLyogQ2hlY2tlZEludC5o
IGluIEhlYWRlcnMgKi8sCkBAIC0yNDQ3NCw3ICsyNDQ3NCw3IEBACiAJCQkJMkQ5MDY2MDcwQkUx
NDFENDAwOTU2OTk4IC8qIExheW91dFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlENjMwRTJB
QzE0OUJGMzQ0MDA1QjJGOTMgLyogTGF5b3V0VGVzdFN1cHBvcnQuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJBQ0YyOTAxMTNCMkEwRDUwMDc4MUY5MCAvKiBMYXlvdXRUeXBlcy5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJMzFCODAxQkIxNUVDNThDNzAwQ0U2NDNEIC8qIExheW91dFR5cGVzSW5saW5lTWV0
aG9kcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzFCODAxQkIxNUVDNThDNzAwQ0U2NDNEIC8qIExh
eW91dFR5cGVzSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTEyREQ4RjUwRDkxRTZBRjAw
MEY4OUVFIC8qIExlZ2FjeVdlYkFyY2hpdmUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRTY1QkVC
MEVBQ0RGMTYwMDdFNDUzMyAvKiBMZW5ndGguaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRkY2NDkx
MEVBRDE1QzIwMEMxRDZGNyAvKiBMZW5ndGhCb3guaCBpbiBIZWFkZXJzICovLApAQCAtMjQ1MTIs
NyArMjQ1MTIsNyBAQAogCQkJCTk3MjhDMzE0MTI2OEU0MzkwMDQxRTg5QiAvKiBNYXJrdXBBY2N1
bXVsYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDBBNjI5QzExM0QwQkVDNzAwNTBBQzUyIC8q
IE1hcmt1cFRva2VuQmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDBDNjBFNDIxM0Q3OTdBRTAw
OTJBMjc1IC8qIE1hcmt1cFRva2VuaXplckJhc2UuaCBpbiBIZWFkZXJzICovLAotCQkJCTAwQzYw
RTNGMTNENzZEN0UwMDkyQTI3NSAvKiBNYXJrdXBUb2tlbml6ZXJJbmxpbmVNZXRob2RzLmggaW4g
SGVhZGVycyAqLywKKwkJCQkwMEM2MEUzRjEzRDc2RDdFMDA5MkEyNzUgLyogTWFya3VwVG9rZW5p
emVySW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkFCRTcyRjUxMDU5QzFFQjAwRDk5OURE
IC8qIE1hdGhNTEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ0QTI4QUFDMTJERkI4QUMw
MEFFOTIzQiAvKiBNYXRoTUxFbGVtZW50RmFjdG9yeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkFC
RTcyRjcxMDU5QzFFQjAwRDk5OUREIC8qIE1hdGhNTElubGluZUNvbnRhaW5lckVsZW1lbnQuaCBp
biBIZWFkZXJzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL01vdXNlUmVsYXRlZEV2ZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL01vdXNlUmVsYXRlZEV2ZW50LmgJ
KHJldmlzaW9uIDEzMzM5MikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Nb3VzZVJlbGF0ZWRFdmVu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw3ICsyNCw3IEBACiAjaWZuZGVmIE1vdXNlUmVsYXRl
ZEV2ZW50X2gKICNkZWZpbmUgTW91c2VSZWxhdGVkRXZlbnRfaAogCi0jaW5jbHVkZSAiTGF5b3V0
VHlwZXNJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiTGF5b3V0VHlwZXNJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiVUlFdmVudFdpdGhLZXlTdGF0ZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vVG91Y2guaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9kb20vVG91Y2guaAkocmV2aXNpb24gMTMzMzkyKQorKysgU291cmNlL1dlYkNvcmUvZG9t
L1RvdWNoLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKICNpZiBFTkFCTEUoVE9V
Q0hfRVZFTlRTKQogCiAjaW5jbHVkZSAiRXZlbnRUYXJnZXQuaCIKLSNpbmNsdWRlICJMYXlvdXRU
eXBlc0lubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJMYXlvdXRUeXBlc0lubGluZXMuaCIKICNp
bmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAj
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIv
SFRNTEVudGl0eVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9w
YXJzZXIvSFRNTEVudGl0eVBhcnNlci5jcHAJKHJldmlzaW9uIDEzMzM5MikKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxFbnRpdHlQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yOCw3ICsyOCw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSFRNTEVudGl0
eVBhcnNlci5oIgogCi0jaW5jbHVkZSAiQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VySW5saW5lTWV0
aG9kcy5oIgorI2luY2x1ZGUgIkNoYXJhY3RlclJlZmVyZW5jZVBhcnNlcklubGluZXMuaCIKICNp
bmNsdWRlICJIVE1MRW50aXR5U2VhcmNoLmgiCiAjaW5jbHVkZSAiSFRNTEVudGl0eVRhYmxlLmgi
CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgpJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC9wYXJzZXIvSFRNTFRva2VuaXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRva2VuaXplci5jcHAJKHJldmlzaW9uIDEzMzM5MikKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUb2tlbml6ZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMiw3ICszMiw3IEBACiAjaW5jbHVkZSAiSFRNTFRva2VuLmgiCiAjaW5jbHVkZSAi
SFRNTFRyZWVCdWlsZGVyLmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiTWFy
a3VwVG9rZW5pemVySW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIk1hcmt1cFRva2VuaXplcklu
bGluZXMuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgPHd0Zi9BU0NJ
SUNUeXBlLmg+CiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL3RyYWNrL1dlYlZUVFRva2VuaXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaHRtbC90cmFjay9XZWJWVFRUb2tlbml6ZXIuY3BwCShyZXZpc2lvbiAxMzMzOTIp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1dlYlZUVFRva2VuaXplci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAKIAogI2luY2x1ZGUgIldlYlZUVFRva2VuaXplci5o
IgogCi0jaW5jbHVkZSAiTWFya3VwVG9rZW5pemVySW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUg
Ik1hcmt1cFRva2VuaXplcklubGluZXMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvVGltZWxpbmVSZWNvcmRGYWN0b3J5LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvVGltZWxpbmVSZWNvcmRGYWN0b3J5
LmNwcAkocmV2aXNpb24gMTMzMzkyKQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1RpbWVs
aW5lUmVjb3JkRmFjdG9yeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAKICNp
bmNsdWRlICJFdmVudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvclZhbHVlcy5oIgogI2luY2x1ZGUg
IkludFJlY3QuaCIKLSNpbmNsdWRlICJMYXlvdXRUeXBlc0lubGluZU1ldGhvZHMuaCIKKyNpbmNs
dWRlICJMYXlvdXRUeXBlc0lubGluZXMuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIK
ICNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCiAjaW5jbHVkZSAiU2NyaXB0Q2FsbFN0YWNr
LmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuaAkocmV2
aXNpb24gMTMzMzkyKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlICJDYWNoZWRSZXNv
dXJjZS5oIgogI2luY2x1ZGUgIkltYWdlT2JzZXJ2ZXIuaCIKICNpbmNsdWRlICJJbnRSZWN0Lmgi
Ci0jaW5jbHVkZSAiTGF5b3V0VHlwZXNJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiTGF5b3V0
VHlwZXNJbmxpbmVzLmgiCiAjaW5jbHVkZSAiU1ZHSW1hZ2VDYWNoZS5oIgogI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NMYXllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NMYXllci5jcHAJKHJldmlzaW9uIDEzMzM5MikKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMiw3ICszMiw3IEBACiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1ZGUgIkZsb2F0
UmVjdC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkxheW91dFR5
cGVzSW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkxheW91dFR5cGVzSW5saW5lcy5oIgogI2lu
Y2x1ZGUgIlJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5oIgogI2luY2x1ZGUgIlRleHRTdHJlYW0u
aCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oCShyZXZpc2lvbiAxMzMzOTIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNCw3ICszNCw3IEBACiAKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiS1VS
TC5oIgotI2luY2x1ZGUgIkxheW91dFR5cGVzSW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkxh
eW91dFR5cGVzSW5saW5lcy5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSA8d3RmL0Zv
cndhcmQuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1TdGF0ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3Jt
U3RhdGUuaAkocmV2aXNpb24gMTMzMzkyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1TdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3
ICszMCw3IEBACiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1ZGUgIkZsb2F0UXVhZC5o
IgogI2luY2x1ZGUgIkludFNpemUuaCIKLSNpbmNsdWRlICJMYXlvdXRUeXBlc0lubGluZU1ldGhv
ZHMuaCIKKyNpbmNsdWRlICJMYXlvdXRUeXBlc0lubGluZXMuaCIKICNpbmNsdWRlICJUcmFuc2Zv
cm1hdGlvbk1hdHJpeC5oIgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KIApJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0NvbHVtbkluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvQ29sdW1uSW5mby5oCShyZXZpc2lvbiAxMzMzOTIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvQ29sdW1uSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsy
Niw3IEBACiAjaWZuZGVmIENvbHVtbkluZm9faAogI2RlZmluZSBDb2x1bW5JbmZvX2gKIAotI2lu
Y2x1ZGUgIkxheW91dFR5cGVzSW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkxheW91dFR5cGVz
SW5saW5lcy5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblNoYXBlSW5zaWRlSW5m
by5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25TaGFw
ZUluc2lkZUluZm8uaAkocmV2aXNpb24gMTMzMzkyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0V4Y2x1c2lvblNoYXBlSW5zaWRlSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICsz
NCw3IEBACiAKICNpbmNsdWRlICJFeGNsdXNpb25TaGFwZS5oIgogI2luY2x1ZGUgIkZsb2F0UmVj
dC5oIgotI2luY2x1ZGUgIkxheW91dFR5cGVzSW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkxh
eW91dFR5cGVzSW5saW5lcy5oIgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3
dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5oCShyZXZpc2lvbiAx
MzMzOTIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQAogI2luY2x1ZGUgIkZyYWN0aW9uYWxM
YXlvdXRSZWN0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1h
Z2VCdWZmZXIuaCIKLSNpbmNsdWRlICJMYXlvdXRUeXBlc0lubGluZU1ldGhvZHMuaCIKKyNpbmNs
dWRlICJMYXlvdXRUeXBlc0lubGluZXMuaCIKICNpbmNsdWRlICJTVkdGaWx0ZXJCdWlsZGVyLmgi
CiAjaW5jbHVkZSAiU291cmNlR3JhcGhpYy5oIgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvSGl0VGVzdFJlc3VsdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9IaXRUZXN0UmVzdWx0LmgJKHJldmlzaW9uIDEzMzM5MikKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDcg
QEAKICNpbmNsdWRlICJGbG9hdFF1YWQuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNs
dWRlICJIaXRUZXN0UmVxdWVzdC5oIgotI2luY2x1ZGUgIkxheW91dFR5cGVzSW5saW5lTWV0aG9k
cy5oIgorI2luY2x1ZGUgIkxheW91dFR5cGVzSW5saW5lcy5oIgogI2luY2x1ZGUgIlRleHREaXJl
Y3Rpb24uaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9MaXN0SGFz
aFNldC5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFJlcGFpbnRlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRSZXBhaW50ZXIu
aAkocmV2aXNpb24gMTMzMzkyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFJl
cGFpbnRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaWZuZGVmIExheW91
dFJlcGFpbnRlcl9oCiAjZGVmaW5lIExheW91dFJlcGFpbnRlcl9oCiAKLSNpbmNsdWRlICJMYXlv
dXRUeXBlc0lubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJMYXlvdXRUeXBlc0lubGluZXMuaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
TGF5b3V0VHlwZXNJbmxpbmVNZXRob2RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0xheW91dFR5cGVzSW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAxMzMzOTIpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0VHlwZXNJbmxpbmVNZXRob2RzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsMTUzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIExheW91dFR5cGVzSW5saW5lTWV0
aG9kc19oCi0jZGVmaW5lIExheW91dFR5cGVzSW5saW5lTWV0aG9kc19oCi0KLSNpbmNsdWRlICJG
bG9hdFJlY3QuaCIKLSNpbmNsdWRlICJGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50LmgiCi0jaW5j
bHVkZSAiRnJhY3Rpb25hbExheW91dFJlY3QuaCIKLSNpbmNsdWRlICJGcmFjdGlvbmFsTGF5b3V0
VW5pdC5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJMYXlvdXRUeXBlcy5oIgot
Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1p
bmxpbmUgRnJhY3Rpb25hbExheW91dFJlY3QgZW5jbG9zaW5nTGF5b3V0UmVjdChjb25zdCBGbG9h
dFJlY3QmIHJlY3QpCi17Ci0gICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QocmVjdCk7Ci19Ci0K
LWlubGluZSBMYXlvdXRTaXplIHJvdW5kZWRMYXlvdXRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgcykK
LXsKLSNpZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKQotICAgIHJldHVybiBGcmFjdGlvbmFsTGF5
b3V0U2l6ZShzKTsKLSNlbHNlCi0gICAgcmV0dXJuIHJvdW5kZWRJbnRTaXplKHMpOwotI2VuZGlm
Ci19Ci0KLWlubGluZSBJbnRSZWN0IHBpeGVsU25hcHBlZEludFJlY3QoTGF5b3V0VW5pdCBsZWZ0
LCBMYXlvdXRVbml0IHRvcCwgTGF5b3V0VW5pdCB3aWR0aCwgTGF5b3V0VW5pdCBoZWlnaHQpCi17
Ci0gICAgcmV0dXJuIEludFJlY3QobGVmdC5yb3VuZCgpLCB0b3Aucm91bmQoKSwgc25hcFNpemVU
b1BpeGVsKHdpZHRoLCBsZWZ0KSwgc25hcFNpemVUb1BpeGVsKGhlaWdodCwgdG9wKSk7Ci19Ci0K
LWlubGluZSBJbnRSZWN0IHBpeGVsU25hcHBlZEludFJlY3RGcm9tRWRnZXMoTGF5b3V0VW5pdCBs
ZWZ0LCBMYXlvdXRVbml0IHRvcCwgTGF5b3V0VW5pdCByaWdodCwgTGF5b3V0VW5pdCBib3R0b20p
Ci17Ci0gICAgcmV0dXJuIEludFJlY3QobGVmdC5yb3VuZCgpLCB0b3Aucm91bmQoKSwgc25hcFNp
emVUb1BpeGVsKHJpZ2h0IC0gbGVmdCwgbGVmdCksIHNuYXBTaXplVG9QaXhlbChib3R0b20gLSB0
b3AsIHRvcCkpOwotfQotCi1pbmxpbmUgTGF5b3V0UG9pbnQgcm91bmRlZExheW91dFBvaW50KGNv
bnN0IEZsb2F0UG9pbnQmIHApCi17Ci0jaWYgRU5BQkxFKFNVQlBJWEVMX0xBWU9VVCkKLSAgICBy
ZXR1cm4gRnJhY3Rpb25hbExheW91dFBvaW50KHApOwotI2Vsc2UKLSAgICByZXR1cm4gcm91bmRl
ZEludFBvaW50KHApOwotI2VuZGlmCi19Ci0KLWlubGluZSBMYXlvdXRQb2ludCBmbG9vcmVkTGF5
b3V0UG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcCkKLXsKLSAgICByZXR1cm4gZmxvb3JlZEZyYWN0
aW9uYWxMYXlvdXRQb2ludChwKTsKLX0KLQotaW5saW5lIExheW91dFBvaW50IGZsb29yZWRMYXlv
dXRQb2ludChjb25zdCBGbG9hdFNpemUmIHMpCi17Ci0gICAgcmV0dXJuIGZsb29yZWRMYXlvdXRQ
b2ludChGbG9hdFBvaW50KHMpKTsKLX0KLQotaW5saW5lIGludCByb3VuZFRvSW50KExheW91dFVu
aXQgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHZhbHVlLnJvdW5kKCk7Ci19Ci0KLWlubGluZSBpbnQg
Zmxvb3JUb0ludChMYXlvdXRVbml0IHZhbHVlKQotewotICAgIHJldHVybiB2YWx1ZS5mbG9vcigp
OwotfQotCi1pbmxpbmUgTGF5b3V0VW5pdCByb3VuZGVkTGF5b3V0VW5pdChmbG9hdCB2YWx1ZSkK
LXsKLSNpZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKQotICAgIHJldHVybiBGcmFjdGlvbmFsTGF5
b3V0VW5pdDo6ZnJvbUZsb2F0Um91bmQodmFsdWUpOwotI2Vsc2UKLSAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8aW50Pihscm91bmRmKHZhbHVlKSk7Ci0jZW5kaWYKLX0KLQotaW5saW5lIExheW91dFVu
aXQgY2VpbGVkTGF5b3V0VW5pdChmbG9hdCB2YWx1ZSkKLXsKLSNpZiBFTkFCTEUoU1VCUElYRUxf
TEFZT1VUKQotICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0VW5pdDo6ZnJvbUZsb2F0Q2VpbCh2
YWx1ZSk7Ci0jZWxzZQotICAgIHJldHVybiBjZWlsZih2YWx1ZSk7Ci0jZW5kaWYKLX0KLQotaW5s
aW5lIExheW91dFVuaXQgYWJzb2x1dGVWYWx1ZShjb25zdCBMYXlvdXRVbml0JiB2YWx1ZSkKLXsK
LSAgICByZXR1cm4gdmFsdWUuYWJzKCk7Ci19Ci0KLWlubGluZSBMYXlvdXRTaXplIHRvTGF5b3V0
U2l6ZShjb25zdCBMYXlvdXRQb2ludCYgcCkKLXsKLSAgICByZXR1cm4gTGF5b3V0U2l6ZShwLngo
KSwgcC55KCkpOwotfQotCi1pbmxpbmUgTGF5b3V0UG9pbnQgdG9MYXlvdXRQb2ludChjb25zdCBM
YXlvdXRTaXplJiBwKQotewotICAgIHJldHVybiBMYXlvdXRQb2ludChwLndpZHRoKCksIHAuaGVp
Z2h0KCkpOwotfQotCi1pbmxpbmUgTGF5b3V0VW5pdCBsYXlvdXRNb2QoY29uc3QgTGF5b3V0VW5p
dCYgbnVtZXJhdG9yLCBjb25zdCBMYXlvdXRVbml0JiBkZW5vbWluYXRvcikKLXsKLSAgICByZXR1
cm4gbnVtZXJhdG9yICUgZGVub21pbmF0b3I7Ci19Ci0KLWlubGluZSBJbnRTaXplIHBpeGVsU25h
cHBlZEludFNpemUoY29uc3QgRnJhY3Rpb25hbExheW91dFNpemUmIHMsIGNvbnN0IEZyYWN0aW9u
YWxMYXlvdXRQb2ludCYgcCkKLXsKLSAgICByZXR1cm4gSW50U2l6ZShzbmFwU2l6ZVRvUGl4ZWwo
cy53aWR0aCgpLCBwLngoKSksIHNuYXBTaXplVG9QaXhlbChzLmhlaWdodCgpLCBwLnkoKSkpOwot
fQotCi1pbmxpbmUgSW50UmVjdCBwaXhlbFNuYXBwZWRJbnRSZWN0KExheW91dFBvaW50IGxvY2F0
aW9uLCBMYXlvdXRTaXplIHNpemUpCi17Ci0gICAgcmV0dXJuIEludFJlY3Qocm91bmRlZEludFBv
aW50KGxvY2F0aW9uKSwgcGl4ZWxTbmFwcGVkSW50U2l6ZShzaXplLCBsb2NhdGlvbikpOwotfQot
Ci1pbmxpbmUgYm9vbCBpc0ludGVnZXJWYWx1ZShjb25zdCBMYXlvdXRVbml0IHZhbHVlKQotewot
ICAgIHJldHVybiB2YWx1ZS50b0ludCgpID09IHZhbHVlOwotfQotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0KLSNlbmRpZiAvLyBMYXlvdXRUeXBlc0lubGluZU1ldGhvZHNfaApJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFR5cGVzSW5saW5lcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRUeXBlc0lubGluZXMuaAkocmV2aXNpb24g
MTMzMzg5KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0VHlwZXNJbmxpbmVN
ZXRob2RzLmg6MTMzMzg5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFR5cGVz
SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTUzIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlv
bi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBMYXlvdXRU
eXBlc0lubGluZU1ldGhvZHNfaAorI2RlZmluZSBMYXlvdXRUeXBlc0lubGluZU1ldGhvZHNfaAor
CisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiRnJhY3Rpb25hbExheW91dEJveEV4
dGVudC5oIgorI2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlvdXRSZWN0LmgiCisjaW5jbHVkZSAiRnJh
Y3Rpb25hbExheW91dFVuaXQuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiTGF5
b3V0VHlwZXMuaCIKKworI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRSZWN0IGVuY2xvc2luZ0xheW91dFJl
Y3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0
KHJlY3QpOworfQorCitpbmxpbmUgTGF5b3V0U2l6ZSByb3VuZGVkTGF5b3V0U2l6ZShjb25zdCBG
bG9hdFNpemUmIHMpCit7CisjaWYgRU5BQkxFKFNVQlBJWEVMX0xBWU9VVCkKKyAgICByZXR1cm4g
RnJhY3Rpb25hbExheW91dFNpemUocyk7CisjZWxzZQorICAgIHJldHVybiByb3VuZGVkSW50U2l6
ZShzKTsKKyNlbmRpZgorfQorCitpbmxpbmUgSW50UmVjdCBwaXhlbFNuYXBwZWRJbnRSZWN0KExh
eW91dFVuaXQgbGVmdCwgTGF5b3V0VW5pdCB0b3AsIExheW91dFVuaXQgd2lkdGgsIExheW91dFVu
aXQgaGVpZ2h0KQoreworICAgIHJldHVybiBJbnRSZWN0KGxlZnQucm91bmQoKSwgdG9wLnJvdW5k
KCksIHNuYXBTaXplVG9QaXhlbCh3aWR0aCwgbGVmdCksIHNuYXBTaXplVG9QaXhlbChoZWlnaHQs
IHRvcCkpOworfQorCitpbmxpbmUgSW50UmVjdCBwaXhlbFNuYXBwZWRJbnRSZWN0RnJvbUVkZ2Vz
KExheW91dFVuaXQgbGVmdCwgTGF5b3V0VW5pdCB0b3AsIExheW91dFVuaXQgcmlnaHQsIExheW91
dFVuaXQgYm90dG9tKQoreworICAgIHJldHVybiBJbnRSZWN0KGxlZnQucm91bmQoKSwgdG9wLnJv
dW5kKCksIHNuYXBTaXplVG9QaXhlbChyaWdodCAtIGxlZnQsIGxlZnQpLCBzbmFwU2l6ZVRvUGl4
ZWwoYm90dG9tIC0gdG9wLCB0b3ApKTsKK30KKworaW5saW5lIExheW91dFBvaW50IHJvdW5kZWRM
YXlvdXRQb2ludChjb25zdCBGbG9hdFBvaW50JiBwKQoreworI2lmIEVOQUJMRShTVUJQSVhFTF9M
QVlPVVQpCisgICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRQb2ludChwKTsKKyNlbHNlCisgICAg
cmV0dXJuIHJvdW5kZWRJbnRQb2ludChwKTsKKyNlbmRpZgorfQorCitpbmxpbmUgTGF5b3V0UG9p
bnQgZmxvb3JlZExheW91dFBvaW50KGNvbnN0IEZsb2F0UG9pbnQmIHApCit7CisgICAgcmV0dXJu
IGZsb29yZWRGcmFjdGlvbmFsTGF5b3V0UG9pbnQocCk7Cit9CisKK2lubGluZSBMYXlvdXRQb2lu
dCBmbG9vcmVkTGF5b3V0UG9pbnQoY29uc3QgRmxvYXRTaXplJiBzKQoreworICAgIHJldHVybiBm
bG9vcmVkTGF5b3V0UG9pbnQoRmxvYXRQb2ludChzKSk7Cit9CisKK2lubGluZSBpbnQgcm91bmRU
b0ludChMYXlvdXRVbml0IHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZS5yb3VuZCgpOworfQor
CitpbmxpbmUgaW50IGZsb29yVG9JbnQoTGF5b3V0VW5pdCB2YWx1ZSkKK3sKKyAgICByZXR1cm4g
dmFsdWUuZmxvb3IoKTsKK30KKworaW5saW5lIExheW91dFVuaXQgcm91bmRlZExheW91dFVuaXQo
ZmxvYXQgdmFsdWUpCit7CisjaWYgRU5BQkxFKFNVQlBJWEVMX0xBWU9VVCkKKyAgICByZXR1cm4g
RnJhY3Rpb25hbExheW91dFVuaXQ6OmZyb21GbG9hdFJvdW5kKHZhbHVlKTsKKyNlbHNlCisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PGludD4obHJvdW5kZih2YWx1ZSkpOworI2VuZGlmCit9CisKK2lu
bGluZSBMYXlvdXRVbml0IGNlaWxlZExheW91dFVuaXQoZmxvYXQgdmFsdWUpCit7CisjaWYgRU5B
QkxFKFNVQlBJWEVMX0xBWU9VVCkKKyAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFVuaXQ6OmZy
b21GbG9hdENlaWwodmFsdWUpOworI2Vsc2UKKyAgICByZXR1cm4gY2VpbGYodmFsdWUpOworI2Vu
ZGlmCit9CisKK2lubGluZSBMYXlvdXRVbml0IGFic29sdXRlVmFsdWUoY29uc3QgTGF5b3V0VW5p
dCYgdmFsdWUpCit7CisgICAgcmV0dXJuIHZhbHVlLmFicygpOworfQorCitpbmxpbmUgTGF5b3V0
U2l6ZSB0b0xheW91dFNpemUoY29uc3QgTGF5b3V0UG9pbnQmIHApCit7CisgICAgcmV0dXJuIExh
eW91dFNpemUocC54KCksIHAueSgpKTsKK30KKworaW5saW5lIExheW91dFBvaW50IHRvTGF5b3V0
UG9pbnQoY29uc3QgTGF5b3V0U2l6ZSYgcCkKK3sKKyAgICByZXR1cm4gTGF5b3V0UG9pbnQocC53
aWR0aCgpLCBwLmhlaWdodCgpKTsKK30KKworaW5saW5lIExheW91dFVuaXQgbGF5b3V0TW9kKGNv
bnN0IExheW91dFVuaXQmIG51bWVyYXRvciwgY29uc3QgTGF5b3V0VW5pdCYgZGVub21pbmF0b3Ip
Cit7CisgICAgcmV0dXJuIG51bWVyYXRvciAlIGRlbm9taW5hdG9yOworfQorCitpbmxpbmUgSW50
U2l6ZSBwaXhlbFNuYXBwZWRJbnRTaXplKGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRTaXplJiBzLCBj
b25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIHApCit7CisgICAgcmV0dXJuIEludFNpemUoc25h
cFNpemVUb1BpeGVsKHMud2lkdGgoKSwgcC54KCkpLCBzbmFwU2l6ZVRvUGl4ZWwocy5oZWlnaHQo
KSwgcC55KCkpKTsKK30KKworaW5saW5lIEludFJlY3QgcGl4ZWxTbmFwcGVkSW50UmVjdChMYXlv
dXRQb2ludCBsb2NhdGlvbiwgTGF5b3V0U2l6ZSBzaXplKQoreworICAgIHJldHVybiBJbnRSZWN0
KHJvdW5kZWRJbnRQb2ludChsb2NhdGlvbiksIHBpeGVsU25hcHBlZEludFNpemUoc2l6ZSwgbG9j
YXRpb24pKTsKK30KKworaW5saW5lIGJvb2wgaXNJbnRlZ2VyVmFsdWUoY29uc3QgTGF5b3V0VW5p
dCB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdmFsdWUudG9JbnQoKSA9PSB2YWx1ZTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gTGF5b3V0VHlwZXNJbmxpbmVNZXRob2Rz
X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRUeXBlc0lubGluZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0VHlwZXNJbmxpbmVz
LmgJKHJldmlzaW9uIDEzMzM4OSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRU
eXBlc0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsOCArMjgsOCBAQAogICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KICAqLwogCi0jaWZuZGVmIExheW91dFR5cGVzSW5saW5lTWV0aG9kc19oCi0jZGVmaW5l
IExheW91dFR5cGVzSW5saW5lTWV0aG9kc19oCisjaWZuZGVmIExheW91dFR5cGVzSW5saW5lc19o
CisjZGVmaW5lIExheW91dFR5cGVzSW5saW5lc19oCiAKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIK
ICNpbmNsdWRlICJGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50LmgiCkBAIC0xNTAsNCArMTUwLDQg
QEAgaW5saW5lIGJvb2wgaXNJbnRlZ2VyVmFsdWUoY29uc3QgTGF5b3V0VQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBMYXlvdXRUeXBlc0lubGluZU1ldGhvZHNfaAorI2Vu
ZGlmIC8vIExheW91dFR5cGVzSW5saW5lc19oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUGFpbnRJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Bh
aW50SW5mby5oCShyZXZpc2lvbiAxMzMzOTIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UGFpbnRJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAKIAogI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJMYXlv
dXRUeXBlc0lubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJMYXlvdXRUeXBlc0lubGluZXMuaCIK
ICNpbmNsdWRlICJQYWludFBoYXNlLmgiCiAjaW5jbHVkZSA8bGltaXRzPgogI2luY2x1ZGUgPHd0
Zi9IYXNoTWFwLmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9k
ZWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Qm94TW9kZWxPYmplY3QuaAkocmV2aXNpb24gMTMzMzkyKQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI0LDcgKzI0
LDcgQEAKICNpZm5kZWYgUmVuZGVyQm94TW9kZWxPYmplY3RfaAogI2RlZmluZSBSZW5kZXJCb3hN
b2RlbE9iamVjdF9oCiAKLSNpbmNsdWRlICJMYXlvdXRUeXBlc0lubGluZU1ldGhvZHMuaCIKKyNp
bmNsdWRlICJMYXlvdXRUeXBlc0lubGluZXMuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllck1vZGVs
T2JqZWN0LmgiCiAjaW5jbHVkZSAiU2hhZG93RGF0YS5oIgogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyR2VvbWV0cnlNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyR2VvbWV0cnlNYXAuaAkocmV2aXNpb24gMTMzMzkyKQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdlb21ldHJ5TWFwLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAjaW5jbHVkZSAi
RmxvYXRRdWFkLmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgotI2luY2x1ZGUgIkxheW91dFR5cGVz
SW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkxheW91dFR5cGVzSW5saW5lcy5oIgogI2luY2x1
ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2VSZXNvdXJjZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZVJlc291cmNlLmgJ
KHJldmlzaW9uIDEzMzM5MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFn
ZVJlc291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlICJD
YWNoZWRJbWFnZS5oIgogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlSGFuZGxlLmgiCiAjaW5jbHVk
ZSAiSW1hZ2UuaCIKLSNpbmNsdWRlICJMYXlvdXRUeXBlc0lubGluZU1ldGhvZHMuaCIKKyNpbmNs
dWRlICJMYXlvdXRUeXBlc0lubGluZXMuaCIKICNpbmNsdWRlICJTdHlsZUltYWdlLmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9S
ZW5kZXJTdHlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHls
ZS9SZW5kZXJTdHlsZS5oCShyZXZpc2lvbiAxMzMzOTIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBA
QAogI2luY2x1ZGUgIkZvbnRCYXNlbGluZS5oIgogI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5o
IgogI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKLSNpbmNsdWRlICJMYXlvdXRUeXBlc0lubGlu
ZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJMYXlvdXRUeXBlc0lubGluZXMuaCIKICNpbmNsdWRlICJM
ZW5ndGguaCIKICNpbmNsdWRlICJMZW5ndGhCb3guaCIKICNpbmNsdWRlICJMZW5ndGhGdW5jdGlv
bnMuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TaGFkb3dEYXRhLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU2hhZG93RGF0
YS5jcHAJKHJldmlzaW9uIDEzMzM5MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHls
ZS9TaGFkb3dEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsNyArMjIsNyBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNoYWRvd0RhdGEuaCIKIAotI2luY2x1ZGUgIkxheW91
dFR5cGVzSW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkxheW91dFR5cGVzSW5saW5lcy5oIgog
CiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS94bWwvcGFyc2Vy
L0NoYXJhY3RlclJlZmVyZW5jZVBhcnNlcklubGluZU1ldGhvZHMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL0NoYXJhY3RlclJlZmVyZW5jZVBhcnNlcklubGluZU1l
dGhvZHMuaAkocmV2aXNpb24gMTMzMzkyKQorKysgU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9D
aGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXJJbmxpbmVNZXRob2RzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsMTczICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSwgSW5jLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0g
Ki8KLQotI2lmbmRlZiBDaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXJJbmxpbmVNZXRob2RzX2gKLSNk
ZWZpbmUgQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VySW5saW5lTWV0aG9kc19oCi0KLSNpbmNsdWRl
IDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotaW5s
aW5lIGJvb2wgaXNIZXhEaWdpdChVQ2hhciBjYykKLXsKLSAgICByZXR1cm4gKGNjID49ICcwJyAm
JiBjYyA8PSAnOScpIHx8IChjYyA+PSAnYScgJiYgY2MgPD0gJ2YnKSB8fCAoY2MgPj0gJ0EnICYm
IGNjIDw9ICdGJyk7Ci19Ci0KLWlubGluZSB2b2lkIHVuY29uc3VtZUNoYXJhY3RlcnMoU2VnbWVu
dGVkU3RyaW5nJiBzb3VyY2UsIGNvbnN0IFN0cmluZ0J1aWxkZXImIGNvbnN1bWVkQ2hhcmFjdGVy
cykKLXsKLSAgICBpZiAoY29uc3VtZWRDaGFyYWN0ZXJzLmxlbmd0aCgpID09IDEpCi0gICAgICAg
IHNvdXJjZS5wdXNoKGNvbnN1bWVkQ2hhcmFjdGVyc1swXSk7Ci0gICAgZWxzZSBpZiAoY29uc3Vt
ZWRDaGFyYWN0ZXJzLmxlbmd0aCgpID09IDIpIHsKLSAgICAgICAgc291cmNlLnB1c2goY29uc3Vt
ZWRDaGFyYWN0ZXJzWzBdKTsKLSAgICAgICAgc291cmNlLnB1c2goY29uc3VtZWRDaGFyYWN0ZXJz
WzFdKTsKLSAgICB9IGVsc2UKLSAgICAgICAgc291cmNlLnByZXBlbmQoU2VnbWVudGVkU3RyaW5n
KFN0cmluZyhjb25zdW1lZENoYXJhY3RlcnMuY2hhcmFjdGVycygpLCBjb25zdW1lZENoYXJhY3Rl
cnMubGVuZ3RoKCkpKSk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBQYXJzZXJGdW5jdGlvbnM+
Ci1ib29sIGNvbnN1bWVDaGFyYWN0ZXJSZWZlcmVuY2UoU2VnbWVudGVkU3RyaW5nJiBzb3VyY2Us
IFN0cmluZ0J1aWxkZXImIGRlY29kZWRDaGFyYWN0ZXIsIGJvb2wmIG5vdEVub3VnaENoYXJhY3Rl
cnMsIFVDaGFyIGFkZGl0aW9uYWxBbGxvd2VkQ2hhcmFjdGVyKQotewotICAgIEFTU0VSVCghYWRk
aXRpb25hbEFsbG93ZWRDaGFyYWN0ZXIgfHwgYWRkaXRpb25hbEFsbG93ZWRDaGFyYWN0ZXIgPT0g
JyInIHx8IGFkZGl0aW9uYWxBbGxvd2VkQ2hhcmFjdGVyID09ICdcJycgfHwgYWRkaXRpb25hbEFs
bG93ZWRDaGFyYWN0ZXIgPT0gJz4nKTsKLSAgICBBU1NFUlQoIW5vdEVub3VnaENoYXJhY3RlcnMp
OwotICAgIEFTU0VSVChkZWNvZGVkQ2hhcmFjdGVyLmlzRW1wdHkoKSk7Ci0gICAgCi0gICAgZW51
bSBFbnRpdHlTdGF0ZSB7Ci0gICAgICAgIEluaXRpYWwsCi0gICAgICAgIE51bWJlciwKLSAgICAg
ICAgTWF5YmVIZXhMb3dlckNhc2VYLAotICAgICAgICBNYXliZUhleFVwcGVyQ2FzZVgsCi0gICAg
ICAgIEhleCwKLSAgICAgICAgRGVjaW1hbCwKLSAgICAgICAgTmFtZWQKLSAgICB9OwotICAgIEVu
dGl0eVN0YXRlIGVudGl0eVN0YXRlID0gSW5pdGlhbDsKLSAgICBVQ2hhcjMyIHJlc3VsdCA9IDA7
Ci0gICAgU3RyaW5nQnVpbGRlciBjb25zdW1lZENoYXJhY3RlcnM7Ci0gICAgCi0gICAgd2hpbGUg
KCFzb3VyY2UuaXNFbXB0eSgpKSB7Ci0gICAgICAgIFVDaGFyIGNjID0gc291cmNlLmN1cnJlbnRD
aGFyKCk7Ci0gICAgICAgIHN3aXRjaCAoZW50aXR5U3RhdGUpIHsKLSAgICAgICAgY2FzZSBJbml0
aWFsOiB7Ci0gICAgICAgICAgICBpZiAoY2MgPT0gJ1x4MDknIHx8IGNjID09ICdceDBBJyB8fCBj
YyA9PSAnXHgwQycgfHwgY2MgPT0gJyAnIHx8IGNjID09ICc8JyB8fCBjYyA9PSAnJicpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYgKGFkZGl0aW9uYWxBbGxv
d2VkQ2hhcmFjdGVyICYmIGNjID09IGFkZGl0aW9uYWxBbGxvd2VkQ2hhcmFjdGVyKQotICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmIChjYyA9PSAnIycpIHsKLSAg
ICAgICAgICAgICAgICBlbnRpdHlTdGF0ZSA9IE51bWJlcjsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICgoY2MgPj0gJ2EnICYmIGNjIDw9ICd6
JykgfHwgKGNjID49ICdBJyAmJiBjYyA8PSAnWicpKSB7Ci0gICAgICAgICAgICAgICAgZW50aXR5
U3RhdGUgPSBOYW1lZDsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBjYXNlIE51bWJl
cjogewotICAgICAgICAgICAgaWYgKGNjID09ICd4JykgewotICAgICAgICAgICAgICAgIGVudGl0
eVN0YXRlID0gTWF5YmVIZXhMb3dlckNhc2VYOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGNjID09ICdYJykgewotICAgICAgICAgICAgICAg
IGVudGl0eVN0YXRlID0gTWF5YmVIZXhVcHBlckNhc2VYOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGNjID49ICcwJyAmJiBjYyA8PSAnOScp
IHsKLSAgICAgICAgICAgICAgICBlbnRpdHlTdGF0ZSA9IERlY2ltYWw7Ci0gICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzb3VyY2UucHVzaCgnIycp
OwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgTWF5
YmVIZXhMb3dlckNhc2VYOiB7Ci0gICAgICAgICAgICBpZiAoaXNIZXhEaWdpdChjYykpIHsKLSAg
ICAgICAgICAgICAgICBlbnRpdHlTdGF0ZSA9IEhleDsKLSAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNvdXJjZS5wdXNoKCcjJyk7Ci0gICAgICAg
ICAgICBzb3VyY2UucHVzaCgneCcpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICB9Ci0gICAgICAgIGNhc2UgTWF5YmVIZXhVcHBlckNhc2VYOiB7Ci0gICAgICAgICAgICBpZiAo
aXNIZXhEaWdpdChjYykpIHsKLSAgICAgICAgICAgICAgICBlbnRpdHlTdGF0ZSA9IEhleDsKLSAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNvdXJj
ZS5wdXNoKCcjJyk7Ci0gICAgICAgICAgICBzb3VyY2UucHVzaCgnWCcpOwotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgSGV4OiB7Ci0gICAgICAgICAg
ICBpZiAoY2MgPj0gJzAnICYmIGNjIDw9ICc5JykKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBy
ZXN1bHQgKiAxNiArIGNjIC0gJzAnOwotICAgICAgICAgICAgZWxzZSBpZiAoY2MgPj0gJ2EnICYm
IGNjIDw9ICdmJykKLSAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQgKiAxNiArIDEwICsg
Y2MgLSAnYSc7Ci0gICAgICAgICAgICBlbHNlIGlmIChjYyA+PSAnQScgJiYgY2MgPD0gJ0YnKQot
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAqIDE2ICsgMTAgKyBjYyAtICdBJzsKLSAg
ICAgICAgICAgIGVsc2UgaWYgKGNjID09ICc7JykgewotICAgICAgICAgICAgICAgIHNvdXJjZS5h
ZHZhbmNlQW5kQVNTRVJUKGNjKTsKLSAgICAgICAgICAgICAgICBQYXJzZXJGdW5jdGlvbnM6OmNv
bnZlcnRUb1VURjE2KFBhcnNlckZ1bmN0aW9uczo6bGVnYWxFbnRpdHlGb3IocmVzdWx0KSwgZGVj
b2RlZENoYXJhY3Rlcik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAg
ICB9IGVsc2UgaWYgKFBhcnNlckZ1bmN0aW9uczo6YWNjZXB0TWFsZm9ybWVkKCkpIHsKLSAgICAg
ICAgICAgICAgICBQYXJzZXJGdW5jdGlvbnM6OmNvbnZlcnRUb1VURjE2KFBhcnNlckZ1bmN0aW9u
czo6bGVnYWxFbnRpdHlGb3IocmVzdWx0KSwgZGVjb2RlZENoYXJhY3Rlcik7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
IHVuY29uc3VtZUNoYXJhY3RlcnMoc291cmNlLCBjb25zdW1lZENoYXJhY3RlcnMpOwotICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRGVjaW1hbDogewotICAgICAgICAgICAgaWYgKGNj
ID49ICcwJyAmJiBjYyA8PSAnOScpCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICog
MTAgKyBjYyAtICcwJzsKLSAgICAgICAgICAgIGVsc2UgaWYgKGNjID09ICc7JykgewotICAgICAg
ICAgICAgICAgIHNvdXJjZS5hZHZhbmNlQW5kQVNTRVJUKGNjKTsKLSAgICAgICAgICAgICAgICBQ
YXJzZXJGdW5jdGlvbnM6OmNvbnZlcnRUb1VURjE2KFBhcnNlckZ1bmN0aW9uczo6bGVnYWxFbnRp
dHlGb3IocmVzdWx0KSwgZGVjb2RlZENoYXJhY3Rlcik7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKFBhcnNlckZ1bmN0aW9uczo6YWNjZXB0TWFs
Zm9ybWVkKCkpIHsKLSAgICAgICAgICAgICAgICBQYXJzZXJGdW5jdGlvbnM6OmNvbnZlcnRUb1VU
RjE2KFBhcnNlckZ1bmN0aW9uczo6bGVnYWxFbnRpdHlGb3IocmVzdWx0KSwgZGVjb2RlZENoYXJh
Y3Rlcik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgIHVuY29uc3VtZUNoYXJhY3RlcnMoc291cmNlLCBjb25zdW1lZENo
YXJhY3RlcnMpOwotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgTmFtZWQ6IHsKLSAg
ICAgICAgICAgIHJldHVybiBQYXJzZXJGdW5jdGlvbnM6OmNvbnN1bWVOYW1lZEVudGl0eShzb3Vy
Y2UsIGRlY29kZWRDaGFyYWN0ZXIsIG5vdEVub3VnaENoYXJhY3RlcnMsIGFkZGl0aW9uYWxBbGxv
d2VkQ2hhcmFjdGVyLCBjYyk7Ci0gICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBjb25zdW1l
ZENoYXJhY3RlcnMuYXBwZW5kKGNjKTsKLSAgICAgICAgc291cmNlLmFkdmFuY2VBbmRBU1NFUlQo
Y2MpOwotICAgIH0KLSAgICBBU1NFUlQoc291cmNlLmlzRW1wdHkoKSk7Ci0gICAgbm90RW5vdWdo
Q2hhcmFjdGVycyA9IHRydWU7Ci0gICAgdW5jb25zdW1lQ2hhcmFjdGVycyhzb3VyY2UsIGNvbnN1
bWVkQ2hhcmFjdGVycyk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi19Ci0KLSNlbmRpZiAvLyBD
aGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXJJbmxpbmVNZXRob2RzX2gKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3htbC9wYXJzZXIvQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VySW5saW5lcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2Vy
SW5saW5lcy5oCShyZXZpc2lvbiAxMzMzODkpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3htbC9wYXJz
ZXIvQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VySW5saW5lTWV0aG9kcy5oOjEzMzM4OSkKKysrIFNv
dXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VySW5saW5lcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MCBHb29nbGUsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2Vy
SW5saW5lTWV0aG9kc19oCisjZGVmaW5lIENoYXJhY3RlclJlZmVyZW5jZVBhcnNlcklubGluZU1l
dGhvZHNfaAorCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2lubGluZSBib29sIGlzSGV4RGlnaXQoVUNoYXIgY2MpCit7CisgICAg
cmV0dXJuIChjYyA+PSAnMCcgJiYgY2MgPD0gJzknKSB8fCAoY2MgPj0gJ2EnICYmIGNjIDw9ICdm
JykgfHwgKGNjID49ICdBJyAmJiBjYyA8PSAnRicpOworfQorCitpbmxpbmUgdm9pZCB1bmNvbnN1
bWVDaGFyYWN0ZXJzKFNlZ21lbnRlZFN0cmluZyYgc291cmNlLCBjb25zdCBTdHJpbmdCdWlsZGVy
JiBjb25zdW1lZENoYXJhY3RlcnMpCit7CisgICAgaWYgKGNvbnN1bWVkQ2hhcmFjdGVycy5sZW5n
dGgoKSA9PSAxKQorICAgICAgICBzb3VyY2UucHVzaChjb25zdW1lZENoYXJhY3RlcnNbMF0pOwor
ICAgIGVsc2UgaWYgKGNvbnN1bWVkQ2hhcmFjdGVycy5sZW5ndGgoKSA9PSAyKSB7CisgICAgICAg
IHNvdXJjZS5wdXNoKGNvbnN1bWVkQ2hhcmFjdGVyc1swXSk7CisgICAgICAgIHNvdXJjZS5wdXNo
KGNvbnN1bWVkQ2hhcmFjdGVyc1sxXSk7CisgICAgfSBlbHNlCisgICAgICAgIHNvdXJjZS5wcmVw
ZW5kKFNlZ21lbnRlZFN0cmluZyhTdHJpbmcoY29uc3VtZWRDaGFyYWN0ZXJzLmNoYXJhY3RlcnMo
KSwgY29uc3VtZWRDaGFyYWN0ZXJzLmxlbmd0aCgpKSkpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgUGFyc2VyRnVuY3Rpb25zPgorYm9vbCBjb25zdW1lQ2hhcmFjdGVyUmVmZXJlbmNlKFNlZ21l
bnRlZFN0cmluZyYgc291cmNlLCBTdHJpbmdCdWlsZGVyJiBkZWNvZGVkQ2hhcmFjdGVyLCBib29s
JiBub3RFbm91Z2hDaGFyYWN0ZXJzLCBVQ2hhciBhZGRpdGlvbmFsQWxsb3dlZENoYXJhY3RlcikK
K3sKKyAgICBBU1NFUlQoIWFkZGl0aW9uYWxBbGxvd2VkQ2hhcmFjdGVyIHx8IGFkZGl0aW9uYWxB
bGxvd2VkQ2hhcmFjdGVyID09ICciJyB8fCBhZGRpdGlvbmFsQWxsb3dlZENoYXJhY3RlciA9PSAn
XCcnIHx8IGFkZGl0aW9uYWxBbGxvd2VkQ2hhcmFjdGVyID09ICc+Jyk7CisgICAgQVNTRVJUKCFu
b3RFbm91Z2hDaGFyYWN0ZXJzKTsKKyAgICBBU1NFUlQoZGVjb2RlZENoYXJhY3Rlci5pc0VtcHR5
KCkpOworICAgIAorICAgIGVudW0gRW50aXR5U3RhdGUgeworICAgICAgICBJbml0aWFsLAorICAg
ICAgICBOdW1iZXIsCisgICAgICAgIE1heWJlSGV4TG93ZXJDYXNlWCwKKyAgICAgICAgTWF5YmVI
ZXhVcHBlckNhc2VYLAorICAgICAgICBIZXgsCisgICAgICAgIERlY2ltYWwsCisgICAgICAgIE5h
bWVkCisgICAgfTsKKyAgICBFbnRpdHlTdGF0ZSBlbnRpdHlTdGF0ZSA9IEluaXRpYWw7CisgICAg
VUNoYXIzMiByZXN1bHQgPSAwOworICAgIFN0cmluZ0J1aWxkZXIgY29uc3VtZWRDaGFyYWN0ZXJz
OworICAgIAorICAgIHdoaWxlICghc291cmNlLmlzRW1wdHkoKSkgeworICAgICAgICBVQ2hhciBj
YyA9IHNvdXJjZS5jdXJyZW50Q2hhcigpOworICAgICAgICBzd2l0Y2ggKGVudGl0eVN0YXRlKSB7
CisgICAgICAgIGNhc2UgSW5pdGlhbDogeworICAgICAgICAgICAgaWYgKGNjID09ICdceDA5JyB8
fCBjYyA9PSAnXHgwQScgfHwgY2MgPT0gJ1x4MEMnIHx8IGNjID09ICcgJyB8fCBjYyA9PSAnPCcg
fHwgY2MgPT0gJyYnKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IGlmIChhZGRpdGlvbmFsQWxsb3dlZENoYXJhY3RlciAmJiBjYyA9PSBhZGRpdGlvbmFsQWxsb3dl
ZENoYXJhY3RlcikKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBp
ZiAoY2MgPT0gJyMnKSB7CisgICAgICAgICAgICAgICAgZW50aXR5U3RhdGUgPSBOdW1iZXI7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoKGNj
ID49ICdhJyAmJiBjYyA8PSAneicpIHx8IChjYyA+PSAnQScgJiYgY2MgPD0gJ1onKSkgeworICAg
ICAgICAgICAgICAgIGVudGl0eVN0YXRlID0gTmFtZWQ7CisgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KyAgICAgICAgY2FzZSBOdW1iZXI6IHsKKyAgICAgICAgICAgIGlmIChjYyA9PSAneCcpIHsKKyAg
ICAgICAgICAgICAgICBlbnRpdHlTdGF0ZSA9IE1heWJlSGV4TG93ZXJDYXNlWDsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjYyA9PSAnWCcp
IHsKKyAgICAgICAgICAgICAgICBlbnRpdHlTdGF0ZSA9IE1heWJlSGV4VXBwZXJDYXNlWDsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjYyA+
PSAnMCcgJiYgY2MgPD0gJzknKSB7CisgICAgICAgICAgICAgICAgZW50aXR5U3RhdGUgPSBEZWNp
bWFsOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgc291cmNlLnB1c2goJyMnKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorICAgICAgICBjYXNlIE1heWJlSGV4TG93ZXJDYXNlWDogeworICAgICAgICAgICAgaWYgKGlz
SGV4RGlnaXQoY2MpKSB7CisgICAgICAgICAgICAgICAgZW50aXR5U3RhdGUgPSBIZXg7CisgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzb3VyY2Uu
cHVzaCgnIycpOworICAgICAgICAgICAgc291cmNlLnB1c2goJ3gnKTsKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBjYXNlIE1heWJlSGV4VXBwZXJDYXNlWDog
eworICAgICAgICAgICAgaWYgKGlzSGV4RGlnaXQoY2MpKSB7CisgICAgICAgICAgICAgICAgZW50
aXR5U3RhdGUgPSBIZXg7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBzb3VyY2UucHVzaCgnIycpOworICAgICAgICAgICAgc291cmNlLnB1c2go
J1gnKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBjYXNl
IEhleDogeworICAgICAgICAgICAgaWYgKGNjID49ICcwJyAmJiBjYyA8PSAnOScpCisgICAgICAg
ICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICogMTYgKyBjYyAtICcwJzsKKyAgICAgICAgICAgIGVs
c2UgaWYgKGNjID49ICdhJyAmJiBjYyA8PSAnZicpCisgICAgICAgICAgICAgICAgcmVzdWx0ID0g
cmVzdWx0ICogMTYgKyAxMCArIGNjIC0gJ2EnOworICAgICAgICAgICAgZWxzZSBpZiAoY2MgPj0g
J0EnICYmIGNjIDw9ICdGJykKKyAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQgKiAxNiAr
IDEwICsgY2MgLSAnQSc7CisgICAgICAgICAgICBlbHNlIGlmIChjYyA9PSAnOycpIHsKKyAgICAg
ICAgICAgICAgICBzb3VyY2UuYWR2YW5jZUFuZEFTU0VSVChjYyk7CisgICAgICAgICAgICAgICAg
UGFyc2VyRnVuY3Rpb25zOjpjb252ZXJ0VG9VVEYxNihQYXJzZXJGdW5jdGlvbnM6OmxlZ2FsRW50
aXR5Rm9yKHJlc3VsdCksIGRlY29kZWRDaGFyYWN0ZXIpOworICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICAgICAgfSBlbHNlIGlmIChQYXJzZXJGdW5jdGlvbnM6OmFjY2VwdE1h
bGZvcm1lZCgpKSB7CisgICAgICAgICAgICAgICAgUGFyc2VyRnVuY3Rpb25zOjpjb252ZXJ0VG9V
VEYxNihQYXJzZXJGdW5jdGlvbnM6OmxlZ2FsRW50aXR5Rm9yKHJlc3VsdCksIGRlY29kZWRDaGFy
YWN0ZXIpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICB1bmNvbnN1bWVDaGFyYWN0ZXJzKHNvdXJjZSwgY29uc3VtZWRD
aGFyYWN0ZXJzKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIERlY2ltYWw6IHsK
KyAgICAgICAgICAgIGlmIChjYyA+PSAnMCcgJiYgY2MgPD0gJzknKQorICAgICAgICAgICAgICAg
IHJlc3VsdCA9IHJlc3VsdCAqIDEwICsgY2MgLSAnMCc7CisgICAgICAgICAgICBlbHNlIGlmIChj
YyA9PSAnOycpIHsKKyAgICAgICAgICAgICAgICBzb3VyY2UuYWR2YW5jZUFuZEFTU0VSVChjYyk7
CisgICAgICAgICAgICAgICAgUGFyc2VyRnVuY3Rpb25zOjpjb252ZXJ0VG9VVEYxNihQYXJzZXJG
dW5jdGlvbnM6OmxlZ2FsRW50aXR5Rm9yKHJlc3VsdCksIGRlY29kZWRDaGFyYWN0ZXIpOworICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfSBlbHNlIGlmIChQYXJzZXJG
dW5jdGlvbnM6OmFjY2VwdE1hbGZvcm1lZCgpKSB7CisgICAgICAgICAgICAgICAgUGFyc2VyRnVu
Y3Rpb25zOjpjb252ZXJ0VG9VVEYxNihQYXJzZXJGdW5jdGlvbnM6OmxlZ2FsRW50aXR5Rm9yKHJl
c3VsdCksIGRlY29kZWRDaGFyYWN0ZXIpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB1bmNvbnN1bWVDaGFyYWN0ZXJz
KHNvdXJjZSwgY29uc3VtZWRDaGFyYWN0ZXJzKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBjYXNlIE5hbWVkOiB7CisgICAgICAgICAgICByZXR1cm4gUGFyc2VyRnVuY3Rpb25zOjpjb25z
dW1lTmFtZWRFbnRpdHkoc291cmNlLCBkZWNvZGVkQ2hhcmFjdGVyLCBub3RFbm91Z2hDaGFyYWN0
ZXJzLCBhZGRpdGlvbmFsQWxsb3dlZENoYXJhY3RlciwgY2MpOworICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgY29uc3VtZWRDaGFyYWN0ZXJzLmFwcGVuZChjYyk7CisgICAgICAgIHNvdXJj
ZS5hZHZhbmNlQW5kQVNTRVJUKGNjKTsKKyAgICB9CisgICAgQVNTRVJUKHNvdXJjZS5pc0VtcHR5
KCkpOworICAgIG5vdEVub3VnaENoYXJhY3RlcnMgPSB0cnVlOworICAgIHVuY29uc3VtZUNoYXJh
Y3RlcnMoc291cmNlLCBjb25zdW1lZENoYXJhY3RlcnMpOworICAgIHJldHVybiBmYWxzZTsKK30K
KworfQorCisjZW5kaWYgLy8gQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VySW5saW5lTWV0aG9kc19o
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL0NoYXJhY3RlclJlZmVyZW5jZVBhcnNl
cklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL0NoYXJh
Y3RlclJlZmVyZW5jZVBhcnNlcklubGluZXMuaAkocmV2aXNpb24gMTMzMzg5KQorKysgU291cmNl
L1dlYkNvcmUveG1sL3BhcnNlci9DaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXJJbmxpbmVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI0LDggKzI0LDggQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNp
Zm5kZWYgQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VySW5saW5lTWV0aG9kc19oCi0jZGVmaW5lIENo
YXJhY3RlclJlZmVyZW5jZVBhcnNlcklubGluZU1ldGhvZHNfaAorI2lmbmRlZiBDaGFyYWN0ZXJS
ZWZlcmVuY2VQYXJzZXJJbmxpbmVzX2gKKyNkZWZpbmUgQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2Vy
SW5saW5lc19oCiAKICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKQEAgLTE3
MCw0ICsxNzAsNCBAQCBib29sIGNvbnN1bWVDaGFyYWN0ZXJSZWZlcmVuY2UoU2VnbWVudGVkCiAK
IH0KIAotI2VuZGlmIC8vIENoYXJhY3RlclJlZmVyZW5jZVBhcnNlcklubGluZU1ldGhvZHNfaAor
I2VuZGlmIC8vIENoYXJhY3RlclJlZmVyZW5jZVBhcnNlcklubGluZXNfaApJbmRleDogU291cmNl
L1dlYkNvcmUveG1sL3BhcnNlci9NYXJrdXBUb2tlbml6ZXJJbmxpbmVNZXRob2RzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9NYXJrdXBUb2tlbml6ZXJJbmxpbmVN
ZXRob2RzLmgJKHJldmlzaW9uIDEzMzM5MikKKysrIFNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIv
TWFya3VwVG9rZW5pemVySW5saW5lTWV0aG9kcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDk1ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1vYmlsZSwgSW5jLiBodHRwOi8v
d3d3LnRvcmNobW9iaWxlLmNvbS8KLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUsIEluYy4g
QWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2lmbmRlZiBNYXJrdXBUb2tlbml6ZXJJbmxpbmVNZXRob2RzX2gKLSNkZWZpbmUg
TWFya3VwVG9rZW5pemVySW5saW5lTWV0aG9kc19oCi0KLSNpbmNsdWRlICJTZWdtZW50ZWRTdHJp
bmcuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1pbmxpbmUgYm9vbCBpc1Rva2VuaXplcldo
aXRlc3BhY2UoVUNoYXIgY2MpCi17Ci0gICAgcmV0dXJuIGNjID09ICcgJyB8fCBjYyA9PSAnXHgw
QScgfHwgY2MgPT0gJ1x4MDknIHx8IGNjID09ICdceDBDJzsKLX0KLQotaW5saW5lIHZvaWQgYWR2
YW5jZVN0cmluZ0FuZEFTU0VSVElnbm9yaW5nQ2FzZShTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSwg
Y29uc3QgY2hhciogZXhwZWN0ZWRDaGFyYWN0ZXJzKQotewotICAgIHdoaWxlICgqZXhwZWN0ZWRD
aGFyYWN0ZXJzKQotICAgICAgICBzb3VyY2UuYWR2YW5jZUFuZEFTU0VSVElnbm9yaW5nQ2FzZSgq
ZXhwZWN0ZWRDaGFyYWN0ZXJzKyspOwotfQotCi1pbmxpbmUgdm9pZCBhZHZhbmNlU3RyaW5nQW5k
QVNTRVJUKFNlZ21lbnRlZFN0cmluZyYgc291cmNlLCBjb25zdCBjaGFyKiBleHBlY3RlZENoYXJh
Y3RlcnMpCi17Ci0gICAgd2hpbGUgKCpleHBlY3RlZENoYXJhY3RlcnMpCi0gICAgICAgIHNvdXJj
ZS5hZHZhbmNlQW5kQVNTRVJUKCpleHBlY3RlZENoYXJhY3RlcnMrKyk7Ci19Ci0KLSNpZiBDT01Q
SUxFUihNU1ZDKQotLy8gV2UgbmVlZCB0byBkaXNhYmxlIHRoZSAidW5yZWFjaGFibGUgY29kZSIg
d2FybmluZyBiZWNhdXNlIHdlIHdhbnQgdG8gYXNzZXJ0Ci0vLyB0aGF0IHNvbWUgY29kZSBwb2lu
dHMgYXJlbid0IHJlYWNoZWQgaW4gdGhlIHN0YXRlIG1hY2hpbmUuCi0jcHJhZ21hIHdhcm5pbmco
ZGlzYWJsZTogNDcwMikKLSNlbmRpZgotCi0jZGVmaW5lIEJFR0lOX1NUQVRFKHByZWZpeCwgc3Rh
dGVOYW1lKSBjYXNlIHByZWZpeDo6c3RhdGVOYW1lOiBzdGF0ZU5hbWU6Ci0jZGVmaW5lIEVORF9T
VEFURSgpIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyBicmVhazsKLQotLy8gV2UgdXNlIHRoaXMgbWFj
cm8gd2hlbiB0aGUgSFRNTDUgc3BlYyBzYXlzICJyZWNvbnN1bWUgdGhlIGN1cnJlbnQgaW5wdXQK
LS8vIGNoYXJhY3RlciBpbiB0aGUgPG11bWJsZT4gc3RhdGUuIgotI2RlZmluZSBSRUNPTlNVTUVf
SU4ocHJlZml4LCBzdGF0ZU5hbWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBtX3N0YXRlID0gcHJlZml4OjpzdGF0ZU5h
bWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBnb3Rv
IHN0YXRlTmFtZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgIH0gd2hpbGUgKGZhbHNlKQotCi0vLyBXZSB1c2UgdGhpcyBtYWNybyB3aGVu
IHRoZSBIVE1MNSBzcGVjIHNheXMgImNvbnN1bWUgdGhlIG5leHQgaW5wdXQKLS8vIGNoYXJhY3Rl
ciAuLi4gYW5kIHN3aXRjaCB0byB0aGUgPG11bWJsZT4gc3RhdGUuIgotI2RlZmluZSBBRFZBTkNF
X1RPKHByZWZpeCwgc3RhdGVOYW1lKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBtX3N0YXRlID0gcHJlZml4OjpzdGF0
ZU5hbWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBp
ZiAoIW1faW5wdXRTdHJlYW1QcmVwcm9jZXNzb3IuYWR2YW5jZShzb3VyY2UpKSAgICAgICAgICAg
ICAgICAgICAgXAotICAgICAgICAgICAgcmV0dXJuIGhhdmVCdWZmZXJlZENoYXJhY3RlclRva2Vu
KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBjYyA9IG1faW5wdXRTdHJl
YW1QcmVwcm9jZXNzb3IubmV4dElucHV0Q2hhcmFjdGVyKCk7ICAgICAgICAgICAgICAgXAotICAg
ICAgICBnb3RvIHN0YXRlTmFtZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgIH0gd2hpbGUgKGZhbHNlKQotCi0vLyBTb21ldGltZXMgdGhl
cmUncyBtb3JlIGNvbXBsaWNhdGVkIGxvZ2ljIGluIHRoZSBzcGVjIHRoYXQgc2VwYXJhdGVzIHdo
ZW4KLS8vIHdlIGNvbnN1bWUgdGhlIG5leHQgaW5wdXQgY2hhcmFjdGVyIGFuZCB3aGVuIHdlIHN3
aXRjaCB0byBhIHBhcnRpY3VsYXIKLS8vIHN0YXRlLiBXZSBoYW5kbGUgdGhvc2UgY2FzZXMgYnkg
YWR2YW5jaW5nIHRoZSBzb3VyY2UgZGlyZWN0bHkgYW5kIHVzaW5nCi0vLyB0aGlzIG1hY3JvIHRv
IHN3aXRjaCB0byB0aGUgaW5kaWNhdGVkIHN0YXRlLgotI2RlZmluZSBTV0lUQ0hfVE8ocHJlZml4
LCBzdGF0ZU5hbWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
IGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgICAgICBtX3N0YXRlID0gcHJlZml4OjpzdGF0ZU5hbWU7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBpZiAoc291cmNl
LmlzRW1wdHkoKSB8fCAhbV9pbnB1dFN0cmVhbVByZXByb2Nlc3Nvci5wZWVrKHNvdXJjZSkpICAg
XAotICAgICAgICAgICAgcmV0dXJuIGhhdmVCdWZmZXJlZENoYXJhY3RlclRva2VuKCk7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBjYyA9IG1faW5wdXRTdHJlYW1QcmVwcm9j
ZXNzb3IubmV4dElucHV0Q2hhcmFjdGVyKCk7ICAgICAgICAgICAgICAgXAotICAgICAgICBnb3Rv
IHN0YXRlTmFtZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgIH0gd2hpbGUgKGZhbHNlKQotCi19Ci0KLSNlbmRpZiAvLyBNYXJrdXBUb2tl
bml6ZXJJbmxpbmVNZXRob2RzX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvTWFy
a3VwVG9rZW5pemVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3htbC9w
YXJzZXIvTWFya3VwVG9rZW5pemVySW5saW5lcy5oCShyZXZpc2lvbiAxMzMzODkpCShmcm9tIFNv
dXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvTWFya3VwVG9rZW5pemVySW5saW5lTWV0aG9kcy5oOjEz
MzM4OSkKKysrIFNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvTWFya3VwVG9rZW5pemVySW5saW5l
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA5IFRvcmNoIE1vYmlsZSwgSW5jLiBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAqIENv
cHlyaWdodCAoQykgMjAxMCBHb29nbGUsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBNYXJrdXBUb2tl
bml6ZXJJbmxpbmVNZXRob2RzX2gKKyNkZWZpbmUgTWFya3VwVG9rZW5pemVySW5saW5lTWV0aG9k
c19oCisKKyNpbmNsdWRlICJTZWdtZW50ZWRTdHJpbmcuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitpbmxpbmUgYm9vbCBpc1Rva2VuaXplcldoaXRlc3BhY2UoVUNoYXIgY2MpCit7CisgICAg
cmV0dXJuIGNjID09ICcgJyB8fCBjYyA9PSAnXHgwQScgfHwgY2MgPT0gJ1x4MDknIHx8IGNjID09
ICdceDBDJzsKK30KKworaW5saW5lIHZvaWQgYWR2YW5jZVN0cmluZ0FuZEFTU0VSVElnbm9yaW5n
Q2FzZShTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSwgY29uc3QgY2hhciogZXhwZWN0ZWRDaGFyYWN0
ZXJzKQoreworICAgIHdoaWxlICgqZXhwZWN0ZWRDaGFyYWN0ZXJzKQorICAgICAgICBzb3VyY2Uu
YWR2YW5jZUFuZEFTU0VSVElnbm9yaW5nQ2FzZSgqZXhwZWN0ZWRDaGFyYWN0ZXJzKyspOworfQor
CitpbmxpbmUgdm9pZCBhZHZhbmNlU3RyaW5nQW5kQVNTRVJUKFNlZ21lbnRlZFN0cmluZyYgc291
cmNlLCBjb25zdCBjaGFyKiBleHBlY3RlZENoYXJhY3RlcnMpCit7CisgICAgd2hpbGUgKCpleHBl
Y3RlZENoYXJhY3RlcnMpCisgICAgICAgIHNvdXJjZS5hZHZhbmNlQW5kQVNTRVJUKCpleHBlY3Rl
ZENoYXJhY3RlcnMrKyk7Cit9CisKKyNpZiBDT01QSUxFUihNU1ZDKQorLy8gV2UgbmVlZCB0byBk
aXNhYmxlIHRoZSAidW5yZWFjaGFibGUgY29kZSIgd2FybmluZyBiZWNhdXNlIHdlIHdhbnQgdG8g
YXNzZXJ0CisvLyB0aGF0IHNvbWUgY29kZSBwb2ludHMgYXJlbid0IHJlYWNoZWQgaW4gdGhlIHN0
YXRlIG1hY2hpbmUuCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDcwMikKKyNlbmRpZgorCisj
ZGVmaW5lIEJFR0lOX1NUQVRFKHByZWZpeCwgc3RhdGVOYW1lKSBjYXNlIHByZWZpeDo6c3RhdGVO
YW1lOiBzdGF0ZU5hbWU6CisjZGVmaW5lIEVORF9TVEFURSgpIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OyBicmVhazsKKworLy8gV2UgdXNlIHRoaXMgbWFjcm8gd2hlbiB0aGUgSFRNTDUgc3BlYyBzYXlz
ICJyZWNvbnN1bWUgdGhlIGN1cnJlbnQgaW5wdXQKKy8vIGNoYXJhY3RlciBpbiB0aGUgPG11bWJs
ZT4gc3RhdGUuIgorI2RlZmluZSBSRUNPTlNVTUVfSU4ocHJlZml4LCBzdGF0ZU5hbWUpICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRvIHsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
ICAgICBtX3N0YXRlID0gcHJlZml4OjpzdGF0ZU5hbWU7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgICAgICBnb3RvIHN0YXRlTmFtZTsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKGZhbHNl
KQorCisvLyBXZSB1c2UgdGhpcyBtYWNybyB3aGVuIHRoZSBIVE1MNSBzcGVjIHNheXMgImNvbnN1
bWUgdGhlIG5leHQgaW5wdXQKKy8vIGNoYXJhY3RlciAuLi4gYW5kIHN3aXRjaCB0byB0aGUgPG11
bWJsZT4gc3RhdGUuIgorI2RlZmluZSBBRFZBTkNFX1RPKHByZWZpeCwgc3RhdGVOYW1lKSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRvIHsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgICAgICBtX3N0YXRlID0gcHJlZml4OjpzdGF0ZU5hbWU7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoIW1faW5wdXRTdHJlYW1QcmVwcm9jZXNz
b3IuYWR2YW5jZShzb3VyY2UpKSAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgcmV0
dXJuIGhhdmVCdWZmZXJlZENoYXJhY3RlclRva2VuKCk7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgICAgICBjYyA9IG1faW5wdXRTdHJlYW1QcmVwcm9jZXNzb3IubmV4dElucHV0Q2hh
cmFjdGVyKCk7ICAgICAgICAgICAgICAgXAorICAgICAgICBnb3RvIHN0YXRlTmFtZTsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hp
bGUgKGZhbHNlKQorCisvLyBTb21ldGltZXMgdGhlcmUncyBtb3JlIGNvbXBsaWNhdGVkIGxvZ2lj
IGluIHRoZSBzcGVjIHRoYXQgc2VwYXJhdGVzIHdoZW4KKy8vIHdlIGNvbnN1bWUgdGhlIG5leHQg
aW5wdXQgY2hhcmFjdGVyIGFuZCB3aGVuIHdlIHN3aXRjaCB0byBhIHBhcnRpY3VsYXIKKy8vIHN0
YXRlLiBXZSBoYW5kbGUgdGhvc2UgY2FzZXMgYnkgYWR2YW5jaW5nIHRoZSBzb3VyY2UgZGlyZWN0
bHkgYW5kIHVzaW5nCisvLyB0aGlzIG1hY3JvIHRvIHN3aXRjaCB0byB0aGUgaW5kaWNhdGVkIHN0
YXRlLgorI2RlZmluZSBTV0lUQ0hfVE8ocHJlZml4LCBzdGF0ZU5hbWUpICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBt
X3N0YXRlID0gcHJlZml4OjpzdGF0ZU5hbWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgICAgICBpZiAoc291cmNlLmlzRW1wdHkoKSB8fCAhbV9pbnB1dFN0cmVh
bVByZXByb2Nlc3Nvci5wZWVrKHNvdXJjZSkpICAgXAorICAgICAgICAgICAgcmV0dXJuIGhhdmVC
dWZmZXJlZENoYXJhY3RlclRva2VuKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
ICAgICBjYyA9IG1faW5wdXRTdHJlYW1QcmVwcm9jZXNzb3IubmV4dElucHV0Q2hhcmFjdGVyKCk7
ICAgICAgICAgICAgICAgXAorICAgICAgICBnb3RvIHN0YXRlTmFtZTsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKGZhbHNl
KQorCit9CisKKyNlbmRpZiAvLyBNYXJrdXBUb2tlbml6ZXJJbmxpbmVNZXRob2RzX2gKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvTWFya3VwVG9rZW5pemVySW5saW5lcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvTWFya3VwVG9rZW5pemVySW5saW5l
cy5oCShyZXZpc2lvbiAxMzMzODkpCisrKyBTb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL01hcmt1
cFRva2VuaXplcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsOCArMjUsOCBAQAogICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIE1hcmt1cFRva2VuaXplcklubGluZU1ldGhvZHNf
aAotI2RlZmluZSBNYXJrdXBUb2tlbml6ZXJJbmxpbmVNZXRob2RzX2gKKyNpZm5kZWYgTWFya3Vw
VG9rZW5pemVySW5saW5lc19oCisjZGVmaW5lIE1hcmt1cFRva2VuaXplcklubGluZXNfaAogCiAj
aW5jbHVkZSAiU2VnbWVudGVkU3RyaW5nLmgiCiAKQEAgLTkyLDQgKzkyLDQgQEAgaW5saW5lIHZv
aWQgYWR2YW5jZVN0cmluZ0FuZEFTU0VSVChTZWdtZQogCiB9CiAKLSNlbmRpZiAvLyBNYXJrdXBU
b2tlbml6ZXJJbmxpbmVNZXRob2RzX2gKKyNlbmRpZiAvLyBNYXJrdXBUb2tlbml6ZXJJbmxpbmVz
X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MQ2hhcmFjdGVyUmVmZXJlbmNl
UGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTENo
YXJhY3RlclJlZmVyZW5jZVBhcnNlci5jcHAJKHJldmlzaW9uIDEzMzM5MikKKysrIFNvdXJjZS9X
ZWJDb3JlL3htbC9wYXJzZXIvWE1MQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAogCiB1c2luZyBuYW1lc3BhY2UgV1RGOwogCi0jaW5j
bHVkZSAiQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VySW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUg
IkNoYXJhY3RlclJlZmVyZW5jZVBhcnNlcklubGluZXMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTFRva2VuaXplci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxUb2tlbml6ZXIuY3BwCShy
ZXZpc2lvbiAxMzMzOTIpCisrKyBTb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTFRva2VuaXpl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJYTUxUb2tlbml6ZXIuaCIKIAotI2luY2x1ZGUgIk1hcmt1cFRva2VuaXpl
cklubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJNYXJrdXBUb2tlbml6ZXJJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJYTUxDaGFyYWN0ZXJSZWZlcmVu
Y2VQYXJzZXIuaCIKICNpbmNsdWRlICJYTUxUb2tlbi5oIgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>173144</attachid>
            <date>2012-11-08 16:24:23 -0800</date>
            <delta_ts>2012-11-08 16:42:59 -0800</delta_ts>
            <desc>Updated patch.</desc>
            <filename>bug-101145.patch</filename>
            <type>text/plain</type>
            <size>259433</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTMzOTcxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcyIEBA
CisyMDEyLTExLTA4ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBS
ZW5hbWVkIC4uLklubGluZU1ldGhvZHMuaCBmaWxlcyB0byAuLi5JbmxpbmVzLmguCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDExNDUuCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBpcyBvbmx5IGEg
cmVmYWN0b3JpbmcgZWZmb3J0IHRvIHJlbmFtZSB0aGUgZmlsZXMuIFRoZXJlIGFyZSBubworICAg
ICAgICBmdW5jdGlvbmFsaXR5IGNoYW5nZXMuCisKKyAgICAgICAgKiBBUEkvSlNPYmplY3RSZWYu
Y3BwOgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogSmF2YVNjcmlw
dENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvajoKKyAgICAg
ICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuY3Bw
OgorICAgICAgICAqIGhlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwOgorICAgICAgICAqIGhlYXAv
Q29waWVkQmxvY2suaDoKKyAgICAgICAgKiBoZWFwL0NvcGllZFNwYWNlLmNwcDoKKyAgICAgICAg
KiBoZWFwL0NvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oOiBSZW1vdmVkLgorICAgICAgICAqIGhl
YXAvQ29waWVkU3BhY2VJbmxpbmVzLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0NvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oLgorICAgICAgICAqIGhlYXAvQ29weVZp
c2l0b3IuY3BwOgorICAgICAgICAqIGhlYXAvQ29weVZpc2l0b3JJbmxpbmVNZXRob2RzLmg6IFJl
bW92ZWQuCisgICAgICAgICogaGVhcC9Db3B5VmlzaXRvcklubGluZXMuaDogQ29waWVkIGZyb20g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVZpc2l0b3JJbmxpbmVNZXRob2RzLmguCisg
ICAgICAgICogaGVhcC9HQ1RocmVhZC5jcHA6CisgICAgICAgICogaGVhcC9HQ1RocmVhZFNoYXJl
ZERhdGEuY3BwOgorICAgICAgICAqIGhlYXAvSGFuZGxlU3RhY2suY3BwOgorICAgICAgICAqIGhl
YXAvSGVhcC5jcHA6CisgICAgICAgICogaGVhcC9IZWFwUm9vdFZpc2l0b3IuaDoKKyAgICAgICAg
KiBoZWFwL01hcmtTdGFjay5jcHA6CisgICAgICAgICogaGVhcC9NYXJrU3RhY2tJbmxpbmVNZXRo
b2RzLmg6IFJlbW92ZWQuCisgICAgICAgICogaGVhcC9NYXJrU3RhY2tJbmxpbmVzLmg6IENvcGll
ZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFja0lubGluZU1ldGhvZHMu
aC4KKyAgICAgICAgKiBoZWFwL1Nsb3RWaXNpdG9yLmNwcDoKKyAgICAgICAgKiBoZWFwL1Nsb3RW
aXNpdG9yLmg6CisgICAgICAgICogaGVhcC9TbG90VmlzaXRvcklubGluZU1ldGhvZHMuaDogUmVt
b3ZlZC4KKyAgICAgICAgKiBoZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oOiBDb3BpZWQgZnJvbSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklubGluZU1ldGhvZHMuaC4KKyAg
ICAgICAgKiBqaXQvSG9zdENhbGxSZXR1cm5WYWx1ZS5jcHA6CisgICAgICAgICogaml0L0pJVC5j
cHA6CisgICAgICAgICogaml0L0pJVEFyaXRobWV0aWMuY3BwOgorICAgICAgICAqIGppdC9KSVRB
cml0aG1ldGljMzJfNjQuY3BwOgorICAgICAgICAqIGppdC9KSVRDYWxsLmNwcDoKKyAgICAgICAg
KiBqaXQvSklUQ2FsbDMyXzY0LmNwcDoKKyAgICAgICAgKiBqaXQvSklUSW5saW5lTWV0aG9kcy5o
OiBSZW1vdmVkLgorICAgICAgICAqIGppdC9KSVRJbmxpbmVzLmg6IENvcGllZCBmcm9tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lTWV0aG9kcy5oLgorICAgICAgICAqIGppdC9K
SVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKiBqaXQvSklUT3Bjb2RlczMyXzY0LmNwcDoKKyAgICAg
ICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0
eUFjY2VzczMyXzY0LmNwcDoKKyAgICAgICAgKiBqc2MuY3BwOgorICAgICAgICAqIHJ1bnRpbWUv
QXJyYXlDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgICogcnVudGltZS9BcnJheVByb3RvdHlwZS5j
cHA6CisgICAgICAgICogcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmg6IFJlbW92ZWQu
CisgICAgICAgICogcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVzLmg6IENvcGllZCBmcm9tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGluZU1ldGhvZHMuaC4KKyAgICAg
ICAgKiBydW50aW1lL0luZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oOiBSZW1vdmVkLgorICAg
ICAgICAqIHJ1bnRpbWUvSW5kZXhpbmdIZWFkZXJJbmxpbmVzLmg6IENvcGllZCBmcm9tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oLgor
ICAgICAgICAqIHJ1bnRpbWUvSlNBY3RpdmF0aW9uLmg6CisgICAgICAgICogcnVudGltZS9KU0Fy
cmF5LmNwcDoKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuaDoKKyAgICAgICAgKiBydW50aW1l
L0pTQ2VsbC5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuY3BwOgorICAgICAgICAqIHJ1
bnRpbWUvSlNWYWx1ZUlubGluZU1ldGhvZHMuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBydW50aW1l
L0pTVmFsdWVJbmxpbmVzLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTVmFsdWVJbmxpbmVNZXRob2RzLmguCisgICAgICAgICogcnVudGltZS9MaXRlcmFsUGFy
c2VyLmNwcDoKKyAgICAgICAgKiBydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmNwcDoKKyAgICAg
ICAgKiBydW50aW1lL09wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cE1hdGNo
ZXNBcnJheS5jcHA6CisgICAgICAgICogcnVudGltZS9SZWdFeHBPYmplY3QuY3BwOgorICAgICAg
ICAqIHJ1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcDoKKwogMjAxMi0xMS0wNyAgRmlsaXAgUGl6
bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIERGRyBjb25zdGFudCBmb2xkaW5nIGFu
ZCBDRkcgc2ltcGxpZmljYXRpb24gc2hvdWxkIGJlIHNtYXJ0IGVub3VnaCB0byBrbm93IHRoYXQg
aWYgYSBsb2dpY2FsIG9wJ3Mgb3BlcmFuZCBpcyBwcm92ZW4gdG8gaGF2ZSBhIG5vbi1tYXNxdWVy
YWRpbmcgc3RydWN0dXJlIHRoZW4gaXQgYWx3YXlzIGV2YWx1YXRlcyB0byB0cnVlCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24gMTMzOTY1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHdvcmtpbmcg
Y29weSkKQEAgLTI1Niw5ICsyNTYsOSBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRCbG9jay5oIFwKIAlTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZS5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0NvcGllZFNwYWNlLmggXAotCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNw
YWNlSW5saW5lTWV0aG9kcy5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRT
cGFjZUlubGluZXMuaCBcCiAgICAgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVZpc2l0
b3IuaCBcCi0gICAgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVZpc2l0b3JJbmxpbmVN
ZXRob2RzLmggXAorICAgIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlWaXNpdG9ySW5s
aW5lcy5oIFwKICAgICBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5VmlzaXRvci5jcHAg
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NhcmRTZXQuaCBcCiAJU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwIFwKQEAgLTI3Niw3ICsyNzYsNyBA
QCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9JbmNyZW1lbnRhbFN3ZWVwZXIuY3BwIFwKICAgICBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9TbG90VmlzaXRvci5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNp
dG9yLmggXAotCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lTWV0
aG9kcy5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklubGluZXMu
aCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlU3RhY2suY3BwIFwKIAlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5kbGVTdGFjay5oIFwKIAlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IYW5kbGVUeXBlcy5oIFwKQEAgLTI5OSw3ICsyOTksNyBAQCBqYXZhc2NyaXB0
Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3Rh
Y2tNYXJrZXIuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmNwcCBc
CiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmggXAotICAgIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFja0lubGluZU1ldGhvZHMuaCBcCisgICAgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrSW5saW5lcy5oIFwKIAlTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwUm9vdFZpc2l0b3IuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2VkQWxsb2NhdG9yLmggXApAQCAtNDAwLDcgKzQwMCw3IEBAIGphdmFzY3JpcHRjb3JlX3Nv
dXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmggXAogCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklURXhjZXB0aW9ucy5oIFwKLQlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VElubGluZU1ldGhvZHMuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVz
LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcCBcCiAJ
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcCBcCiAJU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcCBcCkBAIC00ODMsNyArNDgz
LDcgQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQm9vbGVhbk9iamVjdC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Cb29sZWFuUHJvdG90eXBlLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Qm9vbGVhblByb3RvdHlwZS5oIFwKLQlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0
ZXJmbHlJbmxpbmVNZXRob2RzLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1
dHRlcmZseUlubGluZXMuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVy
Zmx5LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFRyYW5zY2VuZGVu
dGFsRnVuY3Rpb24uaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FsbERhdGEu
Y3BwIFwKQEAgLTUzMSw3ICs1MzEsNyBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuaCBcCiAJU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0lkZW50aWZpZXIuaCBcCi0JU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0luZGV4aW5nSGVhZGVySW5saW5lcy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbmRleGluZ0hlYWRlci5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbmRleGluZ1R5cGUuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bmRleGluZ1R5cGUuaCBcCkBAIC01OTIsNyArNTkyLDcgQEAgamF2YXNjcmlwdGNvcmVfc291cmNl
cyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlSW5mby5oIFwKIAlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlLmNwcCBcCiAJU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5oIFwKLQlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1ZhbHVlSW5saW5lTWV0aG9kcy5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1ZhbHVlSW5saW5lcy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1ZhcmlhYmxlT2JqZWN0LmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNW
YXJpYWJsZU9iamVjdC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dpdGhT
Y29wZS5oIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAxMzM5NjUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsMTAgKzIy
LDEwIEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKIAotI2luY2x1ZGUgIkJ1dHRlcmZseUlubGlu
ZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJCdXR0ZXJmbHlJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQnl0
ZWNvZGVHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJDb21wbGV0aW9uLmgiCi0jaW5jbHVkZSAiQ29w
aWVkU3BhY2VJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiQ29waWVkU3BhY2VJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiRXhjZXB0aW9uSGVscGVycy5oIgogI2luY2x1ZGUgIkhlYXBTdGF0aXN0aWNz
LmgiCiAjaW5jbHVkZSAiSW5pdGlhbGl6ZVRocmVhZGluZy5oIgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9KU09iamVjdFJlZi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9KU09iamVjdFJlZi5jcHAJKHJldmlzaW9uIDEzMzk2NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNPYmplY3RSZWYuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSw5ICsyOSw5IEBACiAjaW5jbHVkZSAiSlNPYmplY3RSZWZQcml2YXRlLmgiCiAKICNpbmNsdWRl
ICJBUElDYXN0LmgiCi0jaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oIgorI2luY2x1
ZGUgIkJ1dHRlcmZseUlubGluZXMuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKLSNpbmNsdWRl
ICJDb3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGlu
ZXMuaCIKICNpbmNsdWRlICJEYXRlQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJFcnJvckNvbnN0
cnVjdG9yLmgiCiAjaW5jbHVkZSAiRnVuY3Rpb25Db25zdHJ1Y3Rvci5oIgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oJ
KHJldmlzaW9uIDEzMzk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC01MzgsNyArNTM4LDcgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJ
CVJlbGF0aXZlUGF0aD0iLi5cLi5ccnVudGltZVxCdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgiCisJ
CQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxydW50aW1lXEJ1dHRlcmZseUlubGluZXMuaCIKIAkJCQk+
CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQpAQCAtNTQ2LDcgKzU0Niw3IEBACiAJCQkJPgogCQkJPC9G
aWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHJ1bnRpbWVcSW5kZXhpbmdI
ZWFkZXJJbmxpbmVNZXRob2RzLmgiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxydW50aW1lXElu
ZGV4aW5nSGVhZGVySW5saW5lcy5oIgogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCkBAIC0x
MDEwLDcgKzEwMTAsNyBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRp
dmVQYXRoPSIuLlwuLlxydW50aW1lXEpTVmFsdWVJbmxpbmVNZXRob2RzLmgiCisJCQkJUmVsYXRp
dmVQYXRoPSIuLlwuLlxydW50aW1lXEpTVmFsdWVJbmxpbmVzLmgiCiAJCQkJPgogCQkJPC9GaWxl
PgogCQkJPEZpbGUKQEAgLTE5ODYsNyArMTk4Niw3IEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJ
PEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGppdFxKSVRJbmxpbmVNZXRob2RzLmgiCisJ
CQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxqaXRcSklUSW5saW5lcy5oIgogCQkJCT4KIAkJCTwvRmls
ZT4KIAkJCTxGaWxlCkBAIC0yMzYyLDcgKzIzNjIsNyBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJ
CTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxoZWFwXENvcGllZFNwYWNlSW5saW5lTWV0
aG9kcy5oIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5caGVhcFxDb3BpZWRTcGFjZUlubGluZXMu
aCIKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQpAQCAtMjM3NCw3ICsyMzc0LDcgQEAKIAkJ
CQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5caGVhcFxD
b3B5VmlzaXRvcklubGluZU1ldGhvZHMuaCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGhlYXBc
Q29weVZpc2l0b3JJbmxpbmVzLmgiCiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKQEAgLTI1
NjIsNyArMjU2Miw3IEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXC4uXGhlYXBcTWFya1N0YWNrSW5saW5lTWV0aG9kcy5oIgorCQkJCVJlbGF0aXZl
UGF0aD0iLi5cLi5caGVhcFxNYXJrU3RhY2tJbmxpbmVzLmgiCiAJCQkJPgogCQkJPC9GaWxlPgog
CQkJPEZpbGUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxMzM5
NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTk1LDkgKzE5NSw5IEBACiAJCTBGQjdG
Mzk1MTVFRDhFNDYwMEYxNjdCMiAvKiBBcnJheUNvbnZlbnRpb25zLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI3RjM4OTE1RUQ4RTM4MDBGMTY3QjIg
LyogQXJyYXlDb252ZW50aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGQjdGMzk2MTVFRDhFNDYwMEYxNjdCMiAvKiBBcnJheVN0b3JhZ2Uu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjdGMzhB
MTVFRDhFMzgwMEYxNjdCMiAvKiBBcnJheVN0b3JhZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkI3RjM5NzE1RUQ4RTQ2MDBGMTY3QjIgLyog
QnV0dGVyZmx5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkI3RjM4QjE1RUQ4RTM4MDBGMTY3QjIgLyogQnV0dGVyZmx5LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEZCN0YzOTgxNUVEOEU0NjAwRjE2
N0IyIC8qIEJ1dHRlcmZseUlubGluZU1ldGhvZHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjdGMzhDMTVFRDhFMzgwMEYxNjdCMiAvKiBCdXR0ZXJm
bHlJbmxpbmVNZXRob2RzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMEZCN0YzOTgxNUVEOEU0NjAwRjE2N0IyIC8qIEJ1dHRlcmZseUlubGluZXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjdGMzhD
MTVFRDhFMzgwMEYxNjdCMiAvKiBCdXR0ZXJmbHlJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZCN0YzOTkxNUVEOEU0NjAwRjE2N0Iy
IC8qIEluZGV4aW5nSGVhZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkI3RjM4RDE1RUQ4RTM4MDBGMTY3QjIgLyogSW5kZXhpbmdIZWFkZXIuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkwRkI3RjM5
QTE1RUQ4RTQ2MDBGMTY3QjIgLyogSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI3RjM4RTE1RUQ4RTM4
MDBGMTY3QjIgLyogSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZCN0YzOUExNUVEOEU0NjAwRjE2
N0IyIC8qIEluZGV4aW5nSGVhZGVySW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCN0YzOEUxNUVEOEUzODAwRjE2N0IyIC8qIEluZGV4aW5n
SGVhZGVySW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGQjdGMzlCMTVFRDhFNDYwMEYxNjdCMiAvKiBJbmRleGluZ1R5cGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjdGMzhGMTVFRDhF
MzgwMEYxNjdCMiAvKiBJbmRleGluZ1R5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkI3RjM5QzE1RUQ4RTQ2MDBGMTY3QjIgLyogUHJvcGVy
dHlTdG9yYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkI3RjM5MDE1RUQ4RTM4MDBGMTY3QjIgLyogUHJvcGVydHlTdG9yYWdlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZCN0YzOUQxNUVEOEU0
NjAwRjE2N0IyIC8qIFJlamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZCN0YzOTExNUVEOEUzODAwRjE2N0IyIC8qIFJlamVjdC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC00NTIsNyArNDUyLDcg
QEAKIAkJODYzQzZEOUMxNTIxMTExQTAwNTg1RTRFIC8qIFlhcnJDYW5vbmljYWxpemVVQ1MyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2M0M2RDk4
MTUyMTExMTIwMDU4NUU0RSAvKiBZYXJyQ2Fub25pY2FsaXplVUNTMi5jcHAgKi87IH07CiAJCTg2
NDJDNTEwMTUxQzA2QTkwMDQ2RDRFRiAvKiBSZWdFeHBDYWNoZWRSZXN1bHQuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZGNzVFRkIxNTFDMDYyRjAw
N0M5QkEzIC8qIFJlZ0V4cENhY2hlZFJlc3VsdC5jcHAgKi87IH07CiAJCTg2NDJDNTEyMTUxQzA4
M0QwMDQ2RDRFRiAvKiBSZWdFeHBNYXRjaGVzQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZGNzVFRkQxNTFDMDYyRjAwN0M5QkEzIC8qIFJl
Z0V4cE1hdGNoZXNBcnJheS5jcHAgKi87IH07Ci0JCTg2NUEzMEYxMTM1MDA3RTEwMENEQjQ5RSAv
KiBKU1ZhbHVlSW5saW5lTWV0aG9kcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gODY1QTMwRjAxMzUwMDdFMTAwQ0RCNDlFIC8qIEpTVmFsdWVJbmxpbmVN
ZXRob2RzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJODY1QTMwRjExMzUwMDdFMTAwQ0RCNDlFIC8qIEpTVmFsdWVJbmxpbmVzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NjVBMzBGMDEzNTAwN0UxMDBD
REI0OUUgLyogSlNWYWx1ZUlubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk4NjVGNDA4ODEwRTdENTYzMDA5NDczNjEgLyogQVBJU2hpbXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2NUY0MDg3
MTBFN0Q1NjMwMDk0NzM2MSAvKiBBUElTaGltcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTg2NjczOUQyMTNCRkRFNzEwMDIzRDg3QyAvKiBCaWdJ
bnRlZ2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4
NjY3MzlEMDEzQkZERTcxMDAyM0Q4N0MgLyogQmlnSW50ZWdlci5oICovOyB9OwogCQk4NjY3MzlE
MzEzQkZERTcxMDAyM0Q4N0MgLyogVWludDE2V2l0aEZyYWN0aW9uLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NjY3MzlEMTEzQkZERTcxMDAyM0Q4N0Mg
LyogVWludDE2V2l0aEZyYWN0aW9uLmggKi87IH07CkBAIC00ODgsNyArNDg4LDcgQEAKIAkJODZD
NTY4RTIxMUEyMTNFRTAwMDdGN0YwIC8qIE1JUFNBc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2QzU2OERGMTFBMjEzRUUwMDA3RjdGMCAv
KiBNSVBTQXNzZW1ibGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJODZDQTAzMkUxMDM4RTg0NDAwMjhBNjA5IC8qIEV4ZWN1dGFibGUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZDQTAzMkQxMDM4
RTg0NDAwMjhBNjA5IC8qIEV4ZWN1dGFibGUuY3BwICovOyB9OwogCQk4NkNBRkVFMzEwMzVEREU2
MDAyOEE2MDkgLyogRXhlY3V0YWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gODZDQUZFRTIxMDM1RERFNjAwMjhBNjA5IC8qIEV4ZWN1dGFibGUuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk4NkNDODVB
MTBFRTc5QTQ3MDAyODg2ODIgLyogSklUSW5saW5lTWV0aG9kcy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZDQzg1QTAwRUU3OUE0NzAwMjg4NjgyIC8q
IEpJVElubGluZU1ldGhvZHMuaCAqLzsgfTsKKwkJODZDQzg1QTEwRUU3OUE0NzAwMjg4NjgyIC8q
IEpJVElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDg2Q0M4NUEwMEVFNzlBNDcwMDI4ODY4MiAvKiBKSVRJbmxpbmVzLmggKi87IH07CiAJCTg2
Q0M4NUEzMEVFNzlCNzQwMDI4ODY4MiAvKiBKSVRDYWxsLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2Q0M4NUEyMEVFNzlCNzQwMDI4ODY4MiAvKiBK
SVRDYWxsLmNwcCAqLzsgfTsKIAkJODZDQzg1QzQwRUU3QTg5NDAwMjg4NjgyIC8qIEpJVFByb3Bl
cnR5QWNjZXNzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDg2Q0M4NUMzMEVFN0E4OTQwMDI4ODY4MiAvKiBKSVRQcm9wZXJ0eUFjY2Vzcy5jcHAgKi87
IH07CiAJCTg2Q0NFRkRFMEY0MTNGODkwMEZEN0Y5RSAvKiBKSVRDb2RlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkNDRUZERDBGNDEzRjg5MDBGRDdG
OUUgLyogSklUQ29kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CkBAIC03MTMsMTEgKzcxMywxMSBAQAogCQlCQ0ZEOEM5MzBFRUIyRUU3MDAyODM4NDgg
LyogSnVtcFRhYmxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCQ0ZEOEM5MTBFRUIyRUU3MDAyODM4NDggLyogSnVtcFRhYmxlLmggKi87IH07CiAJCUMy
MTEyMkUxMTVERDlBQjMwMDc5MEUzQSAvKiBHQ1RocmVhZFNoYXJlZERhdGEuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzIxMTIyREUxNUREOUFCMzAw
NzkwRTNBIC8qIEdDVGhyZWFkU2hhcmVkRGF0YS5jcHAgKi87IH07CiAJCUMyMTEyMkUyMTVERDlB
QjMwMDc5MEUzQSAvKiBHQ1RocmVhZFNoYXJlZERhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMTEyMkRGMTVERDlBQjMwMDc5MEUzQSAvKiBHQ1Ro
cmVhZFNoYXJlZERhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwotCQlDMjExMjJFMzE1REQ5QUIzMDA3OTBFM0EgLyogTWFya1N0YWNrSW5saW5lTWV0
aG9kcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzIx
MTIyRTAxNUREOUFCMzAwNzkwRTNBIC8qIE1hcmtTdGFja0lubGluZU1ldGhvZHMuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlDMjE2MEZFNzE1RjdF
OTVFMDA5NDJERkMgLyogU2xvdFZpc2l0b3JJbmxpbmVNZXRob2RzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNCNDA4NTE1QzBBM0MzMDA0ODkzMkIg
LyogU2xvdFZpc2l0b3JJbmxpbmVNZXRob2RzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQzIxMTIyRTMxNUREOUFCMzAwNzkwRTNBIC8qIE1hcmtT
dGFja0lubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEMyMTEyMkUwMTVERDlBQjMwMDc5MEUzQSAvKiBNYXJrU3RhY2tJbmxpbmVzLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQzIxNjBGRTcxNUY3
RTk1RTAwOTQyREZDIC8qIFNsb3RWaXNpdG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDQjQwODUxNUMwQTNDMzAwNDg5MzJCIC8qIFNs
b3RWaXNpdG9ySW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCUMyMjM5RDE3MTYyNjJCREQwMDVBQzVGRCAvKiBDb3B5VmlzaXRvci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjIzOUQxMjE2
MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3IuY3BwICovOyB9OwogCQlDMjIzOUQxODE2MjYy
QkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEMyMjM5RDEzMTYyNjJCREQwMDVBQzVGRCAvKiBDb3B5VmlzaXRv
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUMy
MjM5RDE5MTYyNjJCREQwMDVBQzVGRCAvKiBDb3B5VmlzaXRvcklubGluZU1ldGhvZHMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMjM5RDE0MTYyNjJC
REQwMDVBQzVGRCAvKiBDb3B5VmlzaXRvcklubGluZU1ldGhvZHMuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlDMjIzOUQxOTE2MjYyQkREMDA1QUM1
RkQgLyogQ29weVZpc2l0b3JJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBDMjIzOUQxNDE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3JJ
bmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJQzIyMzlEMUExNjI2MkJERDAwNUFDNUZEIC8qIEdDVGhyZWFkLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMjM5RDE1MTYyNjJCREQwMDVBQzVG
RCAvKiBHQ1RocmVhZC5jcHAgKi87IH07CiAJCUMyMjM5RDFCMTYyNjJCREQwMDVBQzVGRCAvKiBH
Q1RocmVhZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QzIyMzlEMTYxNjI2MkJERDAwNUFDNUZEIC8qIEdDVGhyZWFkLmggKi87IH07CiAJCUMyMjU0OTQz
MTVGN0RCQUEwMDY1RTg5OCAvKiBTbG90VmlzaXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjI1NDk0MjE1RjdEQkFBMDA2NUU4OTggLyogU2xv
dFZpc2l0b3IuY3BwICovOyB9OwpAQCAtNzMwLDcgKzczMCw3IEBACiAJCUMyQTdGNjg4MTYwNDMy
RDQwMEY3NkI5OCAvKiBKU0Rlc3RydWN0aWJsZU9iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJBN0Y2ODcxNjA0MzJENDAwRjc2Qjk4IC8qIEpT
RGVzdHJ1Y3RpYmxlT2JqZWN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJQzJCOTE2QzIxNERBMDE0RTAwQ0JBQzg2IC8qIE1hcmtlZEFsbG9jYXRv
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJCOTE2
QzExNERBMDE0RTAwQ0JBQzg2IC8qIE1hcmtlZEFsbG9jYXRvci5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUMyQjkxNkM1MTREQTA0MEMwMENCQUM4
NiAvKiBNYXJrZWRBbGxvY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQzJCOTE2QzQxNERBMDQwQzAwQ0JBQzg2IC8qIE1hcmtlZEFsbG9jYXRv
ci5jcHAgKi87IH07Ci0JCUMyQzhEMDJEMTRBM0M2RTAwMDU3OEU2NSAvKiBDb3BpZWRTcGFjZUlu
bGluZU1ldGhvZHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEMyQzhEMDJCMTRBM0M2QjIwMDU3OEU2NSAvKiBDb3BpZWRTcGFjZUlubGluZU1ldGhvZHMu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlDMkM4
RDAyRDE0QTNDNkUwMDA1NzhFNjUgLyogQ29waWVkU3BhY2VJbmxpbmVzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkM4RDAyQjE0QTNDNkIyMDA1NzhF
NjUgLyogQ29waWVkU3BhY2VJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJQzJDOEQwMzAxNEEzQ0VGQzAwNTc4RTY1IC8qIENvcGllZEJs
b2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkM4
RDAyRTE0QTNDRUZDMDA1NzhFNjUgLyogQ29waWVkQmxvY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlDMkM4RDAzMTE0QTNDRUZDMDA1NzhFNjUg
LyogSGVhcEJsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBDMkM4RDAyRjE0QTNDRUZDMDA1NzhFNjUgLyogSGVhcEJsb2NrLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQzJENThDMzQxNTkxMkZFRTAw
MjFBODQ0IC8qIEdDQWN0aXZpdHlDYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkQ1OEMzMzE1OTEyRkVFMDAyMUE4NDQgLyogR0NBY3Rp
dml0eUNhbGxiYWNrLmNwcCAqLzsgfTsKQEAgLTk4Myw5ICs5ODMsOSBAQAogCQkwRkI3RjM4OTE1
RUQ4RTM4MDBGMTY3QjIgLyogQXJyYXlDb252ZW50aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBBcnJheUNvbnZlbnRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGQjdGMzhBMTVFRDhFMzgwMEYxNjdCMiAvKiBBcnJheVN0b3JhZ2UuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXJyYXlTdG9yYWdlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGQjdGMzhCMTVFRDhFMzgwMEYxNjdCMiAvKiBCdXR0ZXJmbHkuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQnV0dGVyZmx5Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTBGQjdGMzhDMTVFRDhFMzgwMEYxNjdCMiAvKiBCdXR0ZXJmbHlJ
bmxpbmVNZXRob2RzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ1dHRlcmZs
eUlubGluZU1ldGhvZHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCN0YzOEMx
NUVEOEUzODAwRjE2N0IyIC8qIEJ1dHRlcmZseUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQnV0dGVyZmx5SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRkI3RjM4RDE1RUQ4RTM4MDBGMTY3QjIgLyogSW5kZXhpbmdIZWFkZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5kZXhpbmdIZWFkZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEZCN0YzOEUxNUVEOEUzODAwRjE2N0IyIC8qIEluZGV4aW5n
SGVhZGVySW5saW5lTWV0aG9kcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJ
bmRleGluZ0hlYWRlcklubGluZU1ldGhvZHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZCN0YzOEUxNUVEOEUzODAwRjE2N0IyIC8qIEluZGV4aW5nSGVhZGVySW5saW5lcy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmRleGluZ0hlYWRlcklubGluZXMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCN0YzOEYxNUVEOEUzODAwRjE2N0IyIC8q
IEluZGV4aW5nVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmRleGlu
Z1R5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCN0YzOTAxNUVEOEUzODAw
RjE2N0IyIC8qIFByb3BlcnR5U3RvcmFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBQcm9wZXJ0eVN0b3JhZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZC
N0YzOTExNUVEOEUzODAwRjE2N0IyIC8qIFJlamVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBSZWplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwMTAs
NyArMTAxMCw3IEBACiAJCTBGQzgxNTA5MTQwNDNCRDIwMENGQTYwMyAvKiBXcml0ZUJhcnJpZXJT
dXBwb3J0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdyaXRlQmFycmllclN1
cHBvcnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZDODE1MTIxNDA1MTE4NjAw
Q0ZBNjAzIC8qIFZUYWJsZVNwZWN0cnVtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFZUYWJsZVNwZWN0cnVtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEZDODE1MTQxNDA1MTE4RDAwQ0ZBNjAzIC8qIFZUYWJsZVNwZWN0cnVtLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZUYWJsZVNwZWN0cnVtLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTBGQ0I0MDg1MTVDMEEzQzMwMDQ4OTMyQiAvKiBTbG90VmlzaXRvcklu
bGluZU1ldGhvZHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2xvdFZpc2l0
b3JJbmxpbmVNZXRob2RzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQ0I0MDg1
MTVDMEEzQzMwMDQ4OTMyQiAvKiBTbG90VmlzaXRvcklubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU2xvdFZpc2l0b3JJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGRDNDODIwMTQxMTVDRjgwMEZEODFDQiAvKiBERkdEcml2ZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHRHJpdmVyLmNwcDsgcGF0aCA9
IGRmZy9ERkdEcml2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQzQzgy
MjE0MTE1RDBFMDBGRDgxQ0IgLyogREZHRHJpdmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERGR0RyaXZlci5oOyBwYXRoID0gZGZnL0RGR0RyaXZlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRkQ4MUFDRjE1NEZCNEVCMDA5ODNFNzIgLyogREZHRG9taW5h
dG9ycy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdEb21pbmF0
b3JzLmNwcDsgcGF0aCA9IGRmZy9ERkdEb21pbmF0b3JzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTEyMzAsNyArMTIzMCw3IEBACiAJCTg2M0M2RDk4MTUyMTExMTIwMDU4NUU0
RSAvKiBZYXJyQ2Fub25pY2FsaXplVUNTMi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBZYXJyQ2Fub25pY2FsaXplVUNTMi5jcHA7IHBhdGggPSB5YXJyL1lhcnJDYW5v
bmljYWxpemVVQ1MyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODYzQzZEOTkx
NTIxMTExMjAwNTg1RTRFIC8qIFlhcnJDYW5vbmljYWxpemVVQ1MyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IFlhcnJDYW5vbmljYWxpemVVQ1MyLmg7IHBhdGggPSB5YXJyL1lh
cnJDYW5vbmljYWxpemVVQ1MyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2M0M2
RDlBMTUyMTExMTIwMDU4NUU0RSAvKiBZYXJyQ2Fub25pY2FsaXplVUNTMi5qcyAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgbmFtZSA9IFlhcnJDYW5vbmljYWxpemVVQ1MyLmpzOyBw
YXRoID0geWFyci9ZYXJyQ2Fub25pY2FsaXplVUNTMi5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJODY1QTMwRjAxMzUwMDdFMTAwQ0RCNDlFIC8qIEpTVmFsdWVJbmxpbmVNZXRob2Rz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTVmFsdWVJbmxpbmVNZXRob2Rz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg2NUEzMEYwMTM1MDA3RTEwMENEQjQ5
RSAvKiBKU1ZhbHVlSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBK
U1ZhbHVlSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NjVGNDA4NzEw
RTdENTYzMDA5NDczNjEgLyogQVBJU2hpbXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQVBJU2hpbXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODY2NzM5RDAx
M0JGREU3MTAwMjNEODdDIC8qIEJpZ0ludGVnZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQmlnSW50ZWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NjY3
MzlEMTEzQkZERTcxMDAyM0Q4N0MgLyogVWludDE2V2l0aEZyYWN0aW9uLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVpbnQxNldpdGhGcmFjdGlvbi5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMTI3Miw3ICsxMjcyLDcgQEAKIAkJODZDNTY4REYxMUEyMTNFRTAw
MDdGN0YwIC8qIE1JUFNBc3NlbWJsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gTUlQU0Fzc2VtYmxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkNBMDMy
RDEwMzhFODQ0MDAyOEE2MDkgLyogRXhlY3V0YWJsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBFeGVjdXRhYmxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJODZDQUZFRTIxMDM1RERFNjAwMjhBNjA5IC8qIEV4ZWN1dGFibGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXhlY3V0YWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQk4NkNDODVBMDBFRTc5QTQ3MDAyODg2ODIgLyogSklUSW5saW5lTWV0aG9kcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKSVRJbmxpbmVNZXRob2RzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg2Q0M4NUEwMEVFNzlBNDcwMDI4ODY4MiAvKiBK
SVRJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVElubGluZXMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZDQzg1QTIwRUU3OUI3NDAwMjg4Njgy
IC8qIEpJVENhbGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSklU
Q2FsbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2Q0M4NUMzMEVFN0E4OTQw
MDI4ODY4MiAvKiBKSVRQcm9wZXJ0eUFjY2Vzcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBKSVRQcm9wZXJ0eUFjY2Vzcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTg2Q0NFRkREMEY0MTNGODkwMEZEN0Y5RSAvKiBKSVRDb2RlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVENvZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTE1MDUsMTAgKzE1MDUsMTAgQEAKIAkJQkNGRDhDOTEwRUVCMkVFNzAwMjgzODQ4
IC8qIEp1bXBUYWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKdW1wVGFi
bGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIxMTIyREUxNUREOUFCMzAwNzkw
RTNBIC8qIEdDVGhyZWFkU2hhcmVkRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBHQ1RocmVhZFNoYXJlZERhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlDMjExMjJERjE1REQ5QUIzMDA3OTBFM0EgLyogR0NUaHJlYWRTaGFyZWREYXRhLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdDVGhyZWFkU2hhcmVkRGF0YS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDMjExMjJFMDE1REQ5QUIzMDA3OTBFM0EgLyog
TWFya1N0YWNrSW5saW5lTWV0aG9kcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBNYXJrU3RhY2tJbmxpbmVNZXRob2RzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUMyMTEyMkUwMTVERDlBQjMwMDc5MEUzQSAvKiBNYXJrU3RhY2tJbmxpbmVzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hcmtTdGFja0lubGluZXMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQzIyMzlEMTIxNjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNpdG9y
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvcHlWaXNpdG9yLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIyMzlEMTMxNjI2MkJERDAwNUFDNUZE
IC8qIENvcHlWaXNpdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvcHlW
aXNpdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUMyMjM5RDE0MTYyNjJCREQw
MDVBQzVGRCAvKiBDb3B5VmlzaXRvcklubGluZU1ldGhvZHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQ29weVZpc2l0b3JJbmxpbmVNZXRob2RzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUMyMjM5RDE0MTYyNjJCREQwMDVBQzVGRCAvKiBDb3B5VmlzaXRvcklu
bGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29weVZpc2l0b3JJbmxp
bmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMjM5RDE1MTYyNjJCREQwMDVB
QzVGRCAvKiBHQ1RocmVhZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBHQ1RocmVhZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMjM5RDE2MTYy
NjJCREQwMDVBQzVGRCAvKiBHQ1RocmVhZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBHQ1RocmVhZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjI1NDk0MjE1
RjdEQkFBMDA2NUU4OTggLyogU2xvdFZpc2l0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gU2xvdFZpc2l0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMTUyMCw3ICsxNTIwLDcgQEAKIAkJQzJBN0Y2ODcxNjA0MzJENDAwRjc2Qjk4IC8qIEpT
RGVzdHJ1Y3RpYmxlT2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpT
RGVzdHJ1Y3RpYmxlT2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyQjkx
NkMxMTREQTAxNEUwMENCQUM4NiAvKiBNYXJrZWRBbGxvY2F0b3IuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gTWFya2VkQWxsb2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUMyQjkxNkM0MTREQTA0MEMwMENCQUM4NiAvKiBNYXJrZWRBbGxvY2F0b3IuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFya2VkQWxsb2NhdG9yLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzJDOEQwMkIxNEEzQzZCMjAwNTc4RTY1
IC8qIENvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBDb3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQzJDOEQwMkIxNEEzQzZCMjAwNTc4RTY1IC8qIENvcGllZFNwYWNlSW5saW5lcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb3BpZWRTcGFjZUlubGluZXMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzJDOEQwMkUxNEEzQ0VGQzAwNTc4RTY1IC8q
IENvcGllZEJsb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvcGllZEJs
b2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyQzhEMDJGMTRBM0NFRkMwMDU3
OEU2NSAvKiBIZWFwQmxvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGVh
cEJsb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyRDU4QzMzMTU5MTJGRUUw
MDIxQTg0NCAvKiBHQ0FjdGl2aXR5Q2FsbGJhY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gR0NBY3Rpdml0eUNhbGxiYWNrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTE4MjAsNyArMTgyMCw3IEBACiAJCQkJMEYyMUMyNjYxNEJFNUY1RTAwQURD
NjRCIC8qIEpJVERyaXZlci5oICovLAogCQkJCTBGNDY4MDdGMTRCQTU3MjcwMEJGRTI3MiAvKiBK
SVRFeGNlcHRpb25zLmNwcCAqLywKIAkJCQkwRjQ2ODA4MDE0QkE1NzI3MDBCRkUyNzIgLyogSklU
RXhjZXB0aW9ucy5oICovLAotCQkJCTg2Q0M4NUEwMEVFNzlBNDcwMDI4ODY4MiAvKiBKSVRJbmxp
bmVNZXRob2RzLmggKi8sCisJCQkJODZDQzg1QTAwRUU3OUE0NzAwMjg4NjgyIC8qIEpJVElubGlu
ZXMuaCAqLywKIAkJCQlCQ0RENTFFOTBGQjhERjc0MDA0QThCREMgLyogSklUT3Bjb2Rlcy5jcHAg
Ki8sCiAJCQkJQTcxMjM2RTQxMTk1RjMzQzAwQkQyMTc0IC8qIEpJVE9wY29kZXMzMl82NC5jcHAg
Ki8sCiAJCQkJODZDQzg1QzMwRUU3QTg5NDAwMjg4NjgyIC8qIEpJVFByb3BlcnR5QWNjZXNzLmNw
cCAqLywKQEAgLTE4NDYsNyArMTg0Niw3IEBACiAJCQljaGlsZHJlbiA9ICgKIAkJCQlDMjIzOUQx
MjE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3IuY3BwICovLAogCQkJCUMyMjM5RDEzMTYy
NjJCREQwMDVBQzVGRCAvKiBDb3B5VmlzaXRvci5oICovLAotCQkJCUMyMjM5RDE0MTYyNjJCREQw
MDVBQzVGRCAvKiBDb3B5VmlzaXRvcklubGluZU1ldGhvZHMuaCAqLywKKwkJCQlDMjIzOUQxNDE2
MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3JJbmxpbmVzLmggKi8sCiAJCQkJQzIyMzlEMTUx
NjI2MkJERDAwNUFDNUZEIC8qIEdDVGhyZWFkLmNwcCAqLywKIAkJCQlDMjIzOUQxNjE2MjYyQkRE
MDA1QUM1RkQgLyogR0NUaHJlYWQuaCAqLywKIAkJCQlDMjREMzFFMDE2MUNENjk1MDAyQUE0REIg
LyogSGVhcFN0YXRpc3RpY3MuY3BwICovLApAQCAtMTg1NCw3ICsxODU0LDcgQEAKIAkJCQlDMjI1
NDk0MjE1RjdEQkFBMDA2NUU4OTggLyogU2xvdFZpc2l0b3IuY3BwICovLAogCQkJCUMyMTEyMkRF
MTVERDlBQjMwMDc5MEUzQSAvKiBHQ1RocmVhZFNoYXJlZERhdGEuY3BwICovLAogCQkJCUMyMTEy
MkRGMTVERDlBQjMwMDc5MEUzQSAvKiBHQ1RocmVhZFNoYXJlZERhdGEuaCAqLywKLQkJCQlDMjEx
MjJFMDE1REQ5QUIzMDA3OTBFM0EgLyogTWFya1N0YWNrSW5saW5lTWV0aG9kcy5oICovLAorCQkJ
CUMyMTEyMkUwMTVERDlBQjMwMDc5MEUzQSAvKiBNYXJrU3RhY2tJbmxpbmVzLmggKi8sCiAJCQkJ
QzJFNTI2QkIxNTkwRUYwMDAwNTRFNDhEIC8qIEhlYXBUaW1lci5jcHAgKi8sCiAJCQkJQzJFNTI2
QkMxNTkwRUYwMDAwNTRFNDhEIC8qIEhlYXBUaW1lci5oICovLAogCQkJCUMyNUY4QkNCMTU3NTQ0
QTkwMDI0NUI3MSAvKiBJbmNyZW1lbnRhbFN3ZWVwZXIuY3BwICovLApAQCAtMTg2OCw3ICsxODY4
LDcgQEAKIAkJCQlDMkM4RDAyRTE0QTNDRUZDMDA1NzhFNjUgLyogQ29waWVkQmxvY2suaCAqLywK
IAkJCQlDMjQwMzA1MzE0QjQwNEM5MDA3OUVCNjQgLyogQ29waWVkU3BhY2UuY3BwICovLAogCQkJ
CUMyRUFBM0Y4MTQ5QTgzMDgwMEZDRTExMiAvKiBDb3BpZWRTcGFjZS5oICovLAotCQkJCUMyQzhE
MDJCMTRBM0M2QjIwMDU3OEU2NSAvKiBDb3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaCAqLywKKwkJ
CQlDMkM4RDAyQjE0QTNDNkIyMDA1NzhFNjUgLyogQ29waWVkU3BhY2VJbmxpbmVzLmggKi8sCiAJ
CQkJMEYyQzU1NkQxNDczOEYyRTAwMTIxRTRGIC8qIERGR0NvZGVCbG9ja3MuY3BwICovLAogCQkJ
CTBGMkM1NTZFMTQ3MzhGMkUwMDEyMUU0RiAvKiBERkdDb2RlQmxvY2tzLmggKi8sCiAJCQkJQkNC
RTJDQUQxNEU5ODVBQTAwMDU5M0FEIC8qIEdDQXNzZXJ0aW9ucy5oICovLApAQCAtMTkwMCw3ICsx
OTAwLDcgQEAKIAkJCQkxNDJENkYwRjEzNTM5QTQxMDBCMDJFODYgLyogTWFya1N0YWNrLmggKi8s
CiAJCQkJMTQ5NzIwOTAxNEVCODMxNTAwRkVCMUI3IC8qIFBhc3NXZWFrLmggKi8sCiAJCQkJMTRC
QTc4RjAxM0FBQjg4RjAwNUI3QzJDIC8qIFNsb3RWaXNpdG9yLmggKi8sCi0JCQkJMEZDQjQwODUx
NUMwQTNDMzAwNDg5MzJCIC8qIFNsb3RWaXNpdG9ySW5saW5lTWV0aG9kcy5oICovLAorCQkJCTBG
Q0I0MDg1MTVDMEEzQzMwMDQ4OTMyQiAvKiBTbG90VmlzaXRvcklubGluZXMuaCAqLywKIAkJCQkx
NDJFMzEzMjEzNEZGMEE2MDBBRkFEQjUgLyogU3Ryb25nLmggKi8sCiAJCQkJMTQ1NzIyODUxNDM3
RTE0MDAwNUZERTI2IC8qIFN0cm9uZ0lubGluZXMuaCAqLywKIAkJCQkxNDE0NDhDQzEzQTE3ODM3
MDBGNUJBMUEgLyogVGlueUJsb29tRmlsdGVyLmggKi8sCkBAIC0yMTA0LDcgKzIxMDQsNyBAQAog
CQkJCUJDNzk1MjM0MEUxNUVCNTYwMEE4OThBQiAvKiBCb29sZWFuUHJvdG90eXBlLmNwcCAqLywK
IAkJCQlCQzc5NTIzNTBFMTVFQjU2MDBBODk4QUIgLyogQm9vbGVhblByb3RvdHlwZS5oICovLAog
CQkJCTBGQjdGMzhCMTVFRDhFMzgwMEYxNjdCMiAvKiBCdXR0ZXJmbHkuaCAqLywKLQkJCQkwRkI3
RjM4QzE1RUQ4RTM4MDBGMTY3QjIgLyogQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oICovLAorCQkJ
CTBGQjdGMzhDMTVFRDhFMzgwMEYxNjdCMiAvKiBCdXR0ZXJmbHlJbmxpbmVzLmggKi8sCiAJCQkJ
ODY5RDA0QUUxMTkzQjU0RDAwODAzNDc1IC8qIENhY2hlZFRyYW5zY2VuZGVudGFsRnVuY3Rpb24u
aCAqLywKIAkJCQlCQ0E2MkRGRTBFMjgyNjIzMDAwNEYzMEQgLyogQ2FsbERhdGEuY3BwICovLAog
CQkJCTE0NUM1MDdGMEQ5REY2M0IwMDg4RjZCOSAvKiBDYWxsRGF0YS5oICovLApAQCAtMjE1MCw3
ICsyMTUwLDcgQEAKIAkJCQk5MzNBMzQ5RDAzOEFFODBGMDA4NjM1Q0UgLyogSWRlbnRpZmllci5j
cHAgKi8sCiAJCQkJOTMzQTM0OUEwMzhBRTdDNjAwODYzNUNFIC8qIElkZW50aWZpZXIuaCAqLywK
IAkJCQkwRkI3RjM4RDE1RUQ4RTM4MDBGMTY3QjIgLyogSW5kZXhpbmdIZWFkZXIuaCAqLywKLQkJ
CQkwRkI3RjM4RTE1RUQ4RTM4MDBGMTY3QjIgLyogSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2Rz
LmggKi8sCisJCQkJMEZCN0YzOEUxNUVEOEUzODAwRjE2N0IyIC8qIEluZGV4aW5nSGVhZGVySW5s
aW5lcy5oICovLAogCQkJCTBGMTNFMDRDMTYxNjRBMUIwMERDOERFNyAvKiBJbmRleGluZ1R5cGUu
Y3BwICovLAogCQkJCTBGQjdGMzhGMTVFRDhFMzgwMEYxNjdCMiAvKiBJbmRleGluZ1R5cGUuaCAq
LywKIAkJCQlFMTc4NjM2QzBEOUJFRUMzMDBENzRFNzUgLyogSW5pdGlhbGl6ZVRocmVhZGluZy5j
cHAgKi8sCkBAIC0yMjA3LDcgKzIyMDcsNyBAQAogCQkJCTY1MDdEMjk3MEU4NzFFNEEwMEQ3RDg5
NiAvKiBKU1R5cGVJbmZvLmggKi8sCiAJCQkJRjY5MkE4ODcwMjU1NTk3RDAxRkY2MEY3IC8qIEpT
VmFsdWUuY3BwICovLAogCQkJCTE0QUJCMzZFMDk5QzA3NjQwMEUyQTI0RiAvKiBKU1ZhbHVlLmgg
Ki8sCi0JCQkJODY1QTMwRjAxMzUwMDdFMTAwQ0RCNDlFIC8qIEpTVmFsdWVJbmxpbmVNZXRob2Rz
LmggKi8sCisJCQkJODY1QTMwRjAxMzUwMDdFMTAwQ0RCNDlFIC8qIEpTVmFsdWVJbmxpbmVzLmgg
Ki8sCiAJCQkJQkMyMkEzOUEwRTE2RTE0ODAwQUYyMUM4IC8qIEpTVmFyaWFibGVPYmplY3QuY3Bw
ICovLAogCQkJCTE0RjI1MjU2MEQwOEREOEQwMDRFQ0ZGRiAvKiBKU1ZhcmlhYmxlT2JqZWN0Lmgg
Ki8sCiAJCQkJMTQ0MjU2NUYxNUVERTk4RDAwNjZBNDlCIC8qIEpTV2l0aFNjb3BlLmNwcCAqLywK
QEAgLTI2MjIsMTQgKzI2MjIsMTQgQEAKIAkJCQlDMkI5MTZDMjE0REEwMTRFMDBDQkFDODYgLyog
TWFya2VkQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTRBMzMyMDE1QkQyRTA3MDA2
RjU0RjMgLyogVk1JbnNwZWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyMjM5RDE4MTYyNjJC
REQwMDVBQzVGRCAvKiBDb3B5VmlzaXRvci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQzIyMzlEMTkx
NjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNpdG9ySW5saW5lTWV0aG9kcy5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJQzIyMzlEMTkxNjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNpdG9ySW5saW5lcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQzI0RDMxRTMxNjFDRDY5NTAwMkFBNERCIC8qIEhlYXBTdGF0
aXN0aWNzLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMkE3RjY4ODE2MDQzMkQ0MDBGNzZCOTggLyog
SlNEZXN0cnVjdGlibGVPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFMjBDRTlFMTVGMDRB
OTUwMERGMzQzMCAvKiBMTEludENMb29wLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjExMjJFMjE1
REQ5QUIzMDA3OTBFM0EgLyogR0NUaHJlYWRTaGFyZWREYXRhLmggaW4gSGVhZGVycyAqLywKLQkJ
CQlDMjE2MEZFNzE1RjdFOTVFMDA5NDJERkMgLyogU2xvdFZpc2l0b3JJbmxpbmVNZXRob2RzLmgg
aW4gSGVhZGVycyAqLywKKwkJCQlDMjE2MEZFNzE1RjdFOTVFMDA5NDJERkMgLyogU2xvdFZpc2l0
b3JJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMkU1MjZCRTE1OTBFRjAwMDA1NEU0OEQg
LyogSGVhcFRpbWVyLmggaW4gSGVhZGVycyAqLywKLQkJCQlDMjExMjJFMzE1REQ5QUIzMDA3OTBF
M0EgLyogTWFya1N0YWNrSW5saW5lTWV0aG9kcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJQzIxMTIy
RTMxNUREOUFCMzAwNzkwRTNBIC8qIE1hcmtTdGFja0lubGluZXMuaCBpbiBIZWFkZXJzICovLAog
CQkJCUMyNUY4QkNFMTU3NTQ0QTkwMDI0NUI3MSAvKiBJbmNyZW1lbnRhbFN3ZWVwZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDMThDM0U2MEUxNkY1Q0QwMEIzNDQ2MCAvKiBBcnJheUNvbnN0cnVj
dG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNFNzBFMTZGNUNEMDBCMzQ0NjAgLyogQXJy
YXlQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLApAQCAtMjY0Miw3ICsyNjQyLDcgQEAKIAkJCQlC
QzE4QzNFQzBFMTZGNUNEMDBCMzQ0NjAgLyogQm9vbGVhbk9iamVjdC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQzJDOEQwMzAxNEEzQ0VGQzAwNTc4RTY1IC8qIENvcGllZEJsb2NrLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlDMkVBQTNGQTE0OUE4MzVFMDBGQ0UxMTIgLyogQ29waWVkU3BhY2UuaCBpbiBI
ZWFkZXJzICovLAotCQkJCUMyQzhEMDJEMTRBM0M2RTAwMDU3OEU2NSAvKiBDb3BpZWRTcGFjZUlu
bGluZU1ldGhvZHMuaCBpbiBIZWFkZXJzICovLAorCQkJCUMyQzhEMDJEMTRBM0M2RTAwMDU3OEU2
NSAvKiBDb3BpZWRTcGFjZUlubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTk2OUEwNzIzMEVE
MUNFMzMwMEYxRjY4MSAvKiBCeXRlY29kZUdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
ODY5RDA0QUYxMTkzQjU0RDAwODAzNDc1IC8qIENhY2hlZFRyYW5zY2VuZGVudGFsRnVuY3Rpb24u
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0VEMEUxNkY1Q0QwMEIzNDQ2MCAvKiBDYWxsRGF0
YS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNzI0LDcgKzI3MjQsNyBAQAogCQkJCUJDMThDNDE1MEUx
NkY1Q0QwMEIzNDQ2MCAvKiBKYXZhU2NyaXB0Q29yZVByZWZpeC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMTQyOUQ5MzAwRUQyMkQ3MDAwQjg5NjE5IC8qIEpJVC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
ODZDQ0VGREUwRjQxM0Y4OTAwRkQ3RjlFIC8qIEpJVENvZGUuaCBpbiBIZWFkZXJzICovLAotCQkJ
CTg2Q0M4NUExMEVFNzlBNDcwMDI4ODY4MiAvKiBKSVRJbmxpbmVNZXRob2RzLmggaW4gSGVhZGVy
cyAqLywKKwkJCQk4NkNDODVBMTBFRTc5QTQ3MDAyODg2ODIgLyogSklUSW5saW5lcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJOTYwNjI2OTYwRkI4RUMwMjAwOTc5OEFCIC8qIEpJVFN0dWJDYWxsLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxNEM1MjQyQjBGNTM1NUU5MDBCQTNEMDQgLyogSklUU3R1YnMu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE3NkY1NEEzMTNCMjhBQUIwMEVGMkJDRSAvKiBKSVRXcml0
ZUJhcnJpZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMjc2Niw3ICsyNzY2LDcgQEAKIAkJCQlCQzE4
QzQyQTBFMTZGNUNEMDBCMzQ0NjAgLyogSlNUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk2NTA3
RDI5RTBFODcxRTVFMDBEN0Q4OTYgLyogSlNUeXBlSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkMxOEM0MkIwRTE2RjVDRDAwQjM0NDYwIC8qIEpTVmFsdWUuaCBpbiBIZWFkZXJzICovLAotCQkJ
CTg2NUEzMEYxMTM1MDA3RTEwMENEQjQ5RSAvKiBKU1ZhbHVlSW5saW5lTWV0aG9kcy5oIGluIEhl
YWRlcnMgKi8sCisJCQkJODY1QTMwRjExMzUwMDdFMTAwQ0RCNDlFIC8qIEpTVmFsdWVJbmxpbmVz
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQyQzBFMTZGNUNEMDBCMzQ0NjAgLyogSlNWYWx1
ZVJlZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MkQwRTE2RjVDRDAwQjM0NDYwIC8qIEpT
VmFyaWFibGVPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NDgyRTkzMTE2QTdDQUQwMDNC
MDcxMiAvKiBKU1dlYWtPYmplY3RNYXBSZWZJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCkBAIC0z
MDAwLDkgKzMwMDAsOSBAQAogCQkJCTBGQjdGMzk1MTVFRDhFNDYwMEYxNjdCMiAvKiBBcnJheUNv
bnZlbnRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkI3RjM5NjE1RUQ4RTQ2MDBGMTY3QjIg
LyogQXJyYXlTdG9yYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkI3RjM5NzE1RUQ4RTQ2MDBG
MTY3QjIgLyogQnV0dGVyZmx5LmggaW4gSGVhZGVycyAqLywKLQkJCQkwRkI3RjM5ODE1RUQ4RTQ2
MDBGMTY3QjIgLyogQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEZCN0YzOTgxNUVEOEU0NjAwRjE2N0IyIC8qIEJ1dHRlcmZseUlubGluZXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGQjdGMzk5MTVFRDhFNDYwMEYxNjdCMiAvKiBJbmRleGluZ0hlYWRlci5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJMEZCN0YzOUExNUVEOEU0NjAwRjE2N0IyIC8qIEluZGV4aW5nSGVh
ZGVySW5saW5lTWV0aG9kcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZCN0YzOUExNUVEOEU0NjAw
RjE2N0IyIC8qIEluZGV4aW5nSGVhZGVySW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZC
N0YzOUIxNUVEOEU0NjAwRjE2N0IyIC8qIEluZGV4aW5nVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZCN0YzOUMxNUVEOEU0NjAwRjE2N0IyIC8qIFByb3BlcnR5U3RvcmFnZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZCN0YzOUQxNUVEOEU0NjAwRjE2N0IyIC8qIFJlamVjdC5oIGluIEhlYWRl
cnMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmNwcAkocmV2aXNpb24gMTMzOTY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAKICNpbmNsdWRl
ICJKU1ZhbHVlLmgiCiAjaW5jbHVkZSAiTG93TGV2ZWxJbnRlcnByZXRlci5oIgogI2luY2x1ZGUg
IlJlcGF0Y2hCdWZmZXIuaCIKLSNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZU1ldGhvZHMuaCIK
KyNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKICNpbmNsdWRlIDxzdGRpby5oPgogI2lu
Y2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2
aXNpb24gMTMzOTY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25z
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsOSArMjcsOSBAQAogI2luY2x1ZGUgIkRGR09wZXJh
dGlvbnMuaCIKIAogI2luY2x1ZGUgIkFyZ3VtZW50cy5oIgotI2luY2x1ZGUgIkJ1dHRlcmZseUlu
bGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJCdXR0ZXJmbHlJbmxpbmVzLmgiCiAjaW5jbHVkZSAi
Q29kZUJsb2NrLmgiCi0jaW5jbHVkZSAiQ29waWVkU3BhY2VJbmxpbmVNZXRob2RzLmgiCisjaW5j
bHVkZSAiQ29waWVkU3BhY2VJbmxpbmVzLmgiCiAjaW5jbHVkZSAiREZHT1NSRXhpdC5oIgogI2lu
Y2x1ZGUgIkRGR1JlcGF0Y2guaCIKICNpbmNsdWRlICJERkdUaHVua3MuaCIKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVSb290cy5jcHAJKHJldmlz
aW9uIDEzMzk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJv
b3RzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsOSArMjYsOSBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIkNvbnNlcnZhdGl2ZVJvb3RzLmgiCiAKLSNpbmNsdWRlICJDb3BpZWRT
cGFjZS5oIgotI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUg
IkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkNvcGllZFNwYWNlLmgiCisjaW5jbHVkZSAiQ29waWVk
U3BhY2VJbmxpbmVzLmgiCiAjaW5jbHVkZSAiREZHQ29kZUJsb2Nrcy5oIgogI2luY2x1ZGUgIkpT
Q2VsbC5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9Db3BpZWRCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0NvcGllZEJsb2NrLmgJKHJldmlzaW9uIDEzMzk2NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0NvcGllZEJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcg
QEAKICNpbmNsdWRlICJCbG9ja0FsbG9jYXRvci5oIgogI2luY2x1ZGUgIkhlYXBCbG9jay5oIgog
I2luY2x1ZGUgIkpTVmFsdWUuaCIKLSNpbmNsdWRlICJKU1ZhbHVlSW5saW5lTWV0aG9kcy5oIgor
I2luY2x1ZGUgIkpTVmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiT3B0aW9ucy5oIgogI2luY2x1
ZGUgPHd0Zi9BdG9taWNzLmg+CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Nv
cGllZFNwYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9D
b3BpZWRTcGFjZS5jcHAJKHJldmlzaW9uIDEzMzk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0NvcGllZFNwYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkNvcGllZFNwYWNlLmgiCiAKLSNpbmNsdWRl
ICJDb3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGlu
ZXMuaCIKICNpbmNsdWRlICJHQ0FjdGl2aXR5Q2FsbGJhY2suaCIKICNpbmNsdWRlICJPcHRpb25z
LmgiCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlSW5saW5l
TWV0aG9kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGll
ZFNwYWNlSW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAxMzM5NjUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaAkod29ya2luZyBjb3B5KQpA
QCAtMSwxODUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
LSAqLwotCi0jaWZuZGVmIENvcGllZFNwYWNlSW5saW5lTWV0aG9kc19oCi0jZGVmaW5lIENvcGll
ZFNwYWNlSW5saW5lTWV0aG9kc19oCi0KLSNpbmNsdWRlICJDb3BpZWRCbG9jay5oIgotI2luY2x1
ZGUgIkNvcGllZFNwYWNlLmgiCi0jaW5jbHVkZSAiSGVhcC5oIgotI2luY2x1ZGUgIkhlYXBCbG9j
ay5oIgotI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgotI2luY2x1ZGUgPHd0Zi9DaGVja2VkQm9v
bGVhbi5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotaW5saW5lIGJvb2wgQ29waWVkU3BhY2U6OmNv
bnRhaW5zKENvcGllZEJsb2NrKiBibG9jaykKLXsKLSAgICByZXR1cm4gIW1fYmxvY2tGaWx0ZXIu
cnVsZU91dChyZWludGVycHJldF9jYXN0PEJpdHM+KGJsb2NrKSkgJiYgbV9ibG9ja1NldC5jb250
YWlucyhibG9jayk7Ci19Ci0KLWlubGluZSBib29sIENvcGllZFNwYWNlOjpjb250YWlucyh2b2lk
KiBwdHIsIENvcGllZEJsb2NrKiYgcmVzdWx0KQotewotICAgIENvcGllZEJsb2NrKiBibG9jayA9
IGJsb2NrRm9yKHB0cik7Ci0gICAgaWYgKGNvbnRhaW5zKGJsb2NrKSkgewotICAgICAgICByZXN1
bHQgPSBibG9jazsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGJsb2NrID0gb3Zl
cnNpemVCbG9ja0ZvcihwdHIpOwotICAgIHJlc3VsdCA9IGJsb2NrOwotICAgIHJldHVybiBjb250
YWlucyhibG9jayk7Ci19Ci0KLWlubGluZSB2b2lkIENvcGllZFNwYWNlOjpwaW4oQ29waWVkQmxv
Y2sqIGJsb2NrKQotewotICAgIGJsb2NrLT5tX2lzUGlubmVkID0gdHJ1ZTsKLX0KLQotaW5saW5l
IHZvaWQgQ29waWVkU3BhY2U6OnBpbklmTmVjZXNzYXJ5KHZvaWQqIG9wYXF1ZVBvaW50ZXIpCi17
Ci0gICAgLy8gUG9pbnRlcnMgaW50byB0aGUgY29waWVkIHNwYWNlIGNvbWUgaW4gdGhlIGZvbGxv
d2luZyB2YXJpZXRpZXM6Ci0gICAgLy8gMSkgIFBvaW50ZXJzIHRvIHRoZSBzdGFydCBvZiBhIHNw
YW4gb2YgbWVtb3J5LiBUaGlzIGlzIHRoZSBtb3N0Ci0gICAgLy8gICAgIG5hdHVyYWwgdGhvdWdo
IG5vdCBuZWNlc3NhcmlseSB0aGUgbW9zdCBjb21tb24uCi0gICAgLy8gMikgIFBvaW50ZXJzIHRv
IG9uZSB2YWx1ZS1zaXplZCAoOCBieXRlKSB3b3JkIHBhc3QgdGhlIGVuZCBvZgotICAgIC8vICAg
ICBhIHNwYW4gb2YgbWVtb3J5LiBUaGlzIGN1cnJlbnRseSBvY2N1cnMgd2l0aCBzZW1pLWJ1dHRl
cmZsaWVzCi0gICAgLy8gICAgIGFuZCBzaG91bGQgYmUgZml4ZWQgc29vbiwgb25jZSB0aGUgb3Ro
ZXIgaGFsZiBvZiB0aGUKLSAgICAvLyAgICAgYnV0dGVyZmx5IGxhbmRzLgotICAgIC8vIDMpICBQ
b2ludGVycyB0byB0aGUgaW5uYXJkcyBhcmlzaW5nIGZyb20gbG9vcCBpbmR1Y3Rpb24gdmFyaWFi
bGUKLSAgICAvLyAgICAgb3B0aW1pemF0aW9ucyAoZWl0aGVyIG1hbnVhbCBvbmVzIG9yIGF1dG9t
YXRpYywgYnkgdGhlCi0gICAgLy8gICAgIGNvbXBpbGVyKS4KLSAgICAvLyA0KSAgUG9pbnRlcnMg
dG8gdGhlIGVuZCBvZiBhIHNwYW4gb2YgbWVtb3J5IGluIGFyaXNpbmcgZnJvbQotICAgIC8vICAg
ICBpbmR1Y3Rpb24gdmFyaWFibGUgb3B0aW1pemF0aW9ucyBjb21iaW5lZCB3aXRoIHRoZQotICAg
IC8vICAgICBHQy10by1jb21waWxlciBjb250cmFjdCBsYWlkIG91dCBpbiB0aGUgQyBzcGVjOiBh
IHBvaW50ZXIgdG8KLSAgICAvLyAgICAgdGhlIGVuZCBvZiBhIHNwYW4gb2YgbWVtb3J5IG11c3Qg
YmUgY29uc2lkZXJlZCB0byBiZSBhCi0gICAgLy8gICAgIHBvaW50ZXIgdG8gdGhhdCBtZW1vcnku
Ci0gICAgCi0gICAgRW5jb2RlZEpTVmFsdWUqIHBvaW50ZXIgPSByZWludGVycHJldF9jYXN0PEVu
Y29kZWRKU1ZhbHVlKj4ob3BhcXVlUG9pbnRlcik7Ci0gICAgQ29waWVkQmxvY2sqIGJsb2NrOwot
Ci0gICAgLy8gSGFuZGxlICgxKSBhbmQgKDMpLgotICAgIGlmIChjb250YWlucyhwb2ludGVyLCBi
bG9jaykpCi0gICAgICAgIHBpbihibG9jayk7Ci0gICAgCi0gICAgLy8gSGFuZGxlICg0KS4gV2Ug
ZG9uJ3QgaGF2ZSB0byBleHBsaWNpdGx5IGNoZWNrIGFuZCBwaW4gdGhlIGJsb2NrIHVuZGVyIHRo
aXMKLSAgICAvLyBwb2ludGVyIGJlY2F1c2UgaXQgY2Fubm90IHBvc3NpYmx5IHBvaW50IHRvIHNv
bWV0aGluZyB0aGF0IGNhc2VzICgxKSBhbmQKLSAgICAvLyAoMykgYWJvdmUgb3IgY2FzZSAoMikg
YmVsb3cgd291bGRuJ3QgYWxyZWFkeSBjYXRjaC4KLSAgICBwb2ludGVyLS07Ci0gICAgCi0gICAg
Ly8gSGFuZGxlICgyKQotICAgIHBvaW50ZXItLTsKLSAgICBpZiAoY29udGFpbnMocG9pbnRlciwg
YmxvY2spKQotICAgICAgICBwaW4oYmxvY2spOwotfQotCi1pbmxpbmUgdm9pZCBDb3BpZWRTcGFj
ZTo6cmVjeWNsZUV2YWN1YXRlZEJsb2NrKENvcGllZEJsb2NrKiBibG9jaykKLXsKLSAgICBBU1NF
UlQoYmxvY2spOwotICAgIEFTU0VSVChibG9jay0+Y2FuQmVSZWN5Y2xlZCgpKTsKLSAgICBBU1NF
UlQoIWJsb2NrLT5tX2lzUGlubmVkKTsKLSAgICB7Ci0gICAgICAgIFNwaW5Mb2NrSG9sZGVyIGxv
Y2tlcigmbV90b1NwYWNlTG9jayk7Ci0gICAgICAgIG1fYmxvY2tTZXQucmVtb3ZlKGJsb2NrKTsK
LSAgICAgICAgbV9mcm9tU3BhY2UtPnJlbW92ZShibG9jayk7Ci0gICAgfQotICAgIG1faGVhcC0+
YmxvY2tBbGxvY2F0b3IoKS5kZWFsbG9jYXRlKENvcGllZEJsb2NrOjpkZXN0cm95KGJsb2NrKSk7
Ci19Ci0KLWlubGluZSB2b2lkIENvcGllZFNwYWNlOjpyZWN5Y2xlQm9ycm93ZWRCbG9jayhDb3Bp
ZWRCbG9jayogYmxvY2spCi17Ci0gICAgbV9oZWFwLT5ibG9ja0FsbG9jYXRvcigpLmRlYWxsb2Nh
dGUoQ29waWVkQmxvY2s6OmRlc3Ryb3koYmxvY2spKTsKLQotICAgIHsKLSAgICAgICAgTXV0ZXhM
b2NrZXIgbG9ja2VyKG1fbG9hbmVkQmxvY2tzTG9jayk7Ci0gICAgICAgIEFTU0VSVChtX251bWJl
ck9mTG9hbmVkQmxvY2tzID4gMCk7Ci0gICAgICAgIEFTU0VSVChtX2luQ29weWluZ1BoYXNlKTsK
LSAgICAgICAgbV9udW1iZXJPZkxvYW5lZEJsb2Nrcy0tOwotICAgICAgICBpZiAoIW1fbnVtYmVy
T2ZMb2FuZWRCbG9ja3MpCi0gICAgICAgICAgICBtX2xvYW5lZEJsb2Nrc0NvbmRpdGlvbi5zaWdu
YWwoKTsKLSAgICB9Ci19Ci0KLWlubGluZSBDb3BpZWRCbG9jayogQ29waWVkU3BhY2U6OmFsbG9j
YXRlQmxvY2tGb3JDb3B5aW5nUGhhc2UoKQotewotICAgIEFTU0VSVChtX2luQ29weWluZ1BoYXNl
KTsKLSAgICBDb3BpZWRCbG9jayogYmxvY2sgPSBDb3BpZWRCbG9jazo6Y3JlYXRlTm9aZXJvRmls
bChtX2hlYXAtPmJsb2NrQWxsb2NhdG9yKCkuYWxsb2NhdGU8Q29waWVkQmxvY2s+KCkpOwotCi0g
ICAgewotICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9sb2FuZWRCbG9ja3NMb2NrKTsKLSAg
ICAgICAgbV9udW1iZXJPZkxvYW5lZEJsb2NrcysrOwotICAgIH0KLQotICAgIEFTU0VSVCghYmxv
Y2stPmRhdGFTaXplKCkpOwotICAgIHJldHVybiBibG9jazsKLX0KLQotaW5saW5lIHZvaWQgQ29w
aWVkU3BhY2U6OmFsbG9jYXRlQmxvY2soKQotewotICAgIGlmIChtX2hlYXAtPnNob3VsZENvbGxl
Y3QoKSkKLSAgICAgICAgbV9oZWFwLT5jb2xsZWN0KEhlYXA6OkRvTm90U3dlZXApOwotCi0gICAg
bV9hbGxvY2F0b3IucmVzZXRDdXJyZW50QmxvY2soKTsKLSAgICAKLSAgICBDb3BpZWRCbG9jayog
YmxvY2sgPSBDb3BpZWRCbG9jazo6Y3JlYXRlKG1faGVhcC0+YmxvY2tBbGxvY2F0b3IoKS5hbGxv
Y2F0ZTxDb3BpZWRCbG9jaz4oKSk7Ci0gICAgICAgIAotICAgIG1fdG9TcGFjZS0+cHVzaChibG9j
ayk7Ci0gICAgbV9ibG9ja0ZpbHRlci5hZGQocmVpbnRlcnByZXRfY2FzdDxCaXRzPihibG9jaykp
OwotICAgIG1fYmxvY2tTZXQuYWRkKGJsb2NrKTsKLSAgICBtX2FsbG9jYXRvci5zZXRDdXJyZW50
QmxvY2soYmxvY2spOwotfQotCi1pbmxpbmUgQ2hlY2tlZEJvb2xlYW4gQ29waWVkU3BhY2U6OnRy
eUFsbG9jYXRlKHNpemVfdCBieXRlcywgdm9pZCoqIG91dFB0cikKLXsKLSAgICBBU1NFUlQoIW1f
aGVhcC0+Z2xvYmFsRGF0YSgpLT5pc0luaXRpYWxpemluZ09iamVjdCgpKTsKLQotICAgIGlmIChp
c092ZXJzaXplKGJ5dGVzKSB8fCAhbV9hbGxvY2F0b3IudHJ5QWxsb2NhdGUoYnl0ZXMsIG91dFB0
cikpCi0gICAgICAgIHJldHVybiB0cnlBbGxvY2F0ZVNsb3dDYXNlKGJ5dGVzLCBvdXRQdHIpOwot
ICAgIAotICAgIEFTU0VSVCgqb3V0UHRyKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotaW5saW5l
IGJvb2wgQ29waWVkU3BhY2U6OmlzT3ZlcnNpemUoc2l6ZV90IGJ5dGVzKQotewotICAgIHJldHVy
biBieXRlcyA+IHNfbWF4QWxsb2NhdGlvblNpemU7Ci19Ci0KLWlubGluZSBib29sIENvcGllZFNw
YWNlOjppc1Bpbm5lZCh2b2lkKiBwdHIpCi17Ci0gICAgcmV0dXJuIGJsb2NrRm9yKHB0ciktPm1f
aXNQaW5uZWQ7Ci19Ci0KLWlubGluZSBDb3BpZWRCbG9jayogQ29waWVkU3BhY2U6Om92ZXJzaXpl
QmxvY2tGb3Iodm9pZCogcHRyKQotewotICAgIHJldHVybiByZWludGVycHJldF9jYXN0PENvcGll
ZEJsb2NrKj4ocmVpbnRlcnByZXRfY2FzdDxzaXplX3Q+KHB0cikgJiBXVEY6OnBhZ2VNYXNrKCkp
OwotfQotCi1pbmxpbmUgQ29waWVkQmxvY2sqIENvcGllZFNwYWNlOjpibG9ja0Zvcih2b2lkKiBw
dHIpCi17Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Q29waWVkQmxvY2sqPihyZWludGVy
cHJldF9jYXN0PHNpemVfdD4ocHRyKSAmIHNfYmxvY2tNYXNrKTsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgSlNDCi0KLSNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVk
U3BhY2VJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
Q29waWVkU3BhY2VJbmxpbmVzLmgJKHJldmlzaW9uIDEzMzM4OSkJKGZyb20gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2VJbmxpbmVNZXRob2RzLmg6MTMzMzg5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2VJbmxpbmVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBDb3BpZWRTcGFjZUlubGluZU1ldGhvZHNfaAorI2RlZmluZSBD
b3BpZWRTcGFjZUlubGluZU1ldGhvZHNfaAorCisjaW5jbHVkZSAiQ29waWVkQmxvY2suaCIKKyNp
bmNsdWRlICJDb3BpZWRTcGFjZS5oIgorI2luY2x1ZGUgIkhlYXAuaCIKKyNpbmNsdWRlICJIZWFw
QmxvY2suaCIKKyNpbmNsdWRlICJKU0dsb2JhbERhdGEuaCIKKyNpbmNsdWRlIDx3dGYvQ2hlY2tl
ZEJvb2xlYW4uaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2lubGluZSBib29sIENvcGllZFNwYWNl
Ojpjb250YWlucyhDb3BpZWRCbG9jayogYmxvY2spCit7CisgICAgcmV0dXJuICFtX2Jsb2NrRmls
dGVyLnJ1bGVPdXQocmVpbnRlcnByZXRfY2FzdDxCaXRzPihibG9jaykpICYmIG1fYmxvY2tTZXQu
Y29udGFpbnMoYmxvY2spOworfQorCitpbmxpbmUgYm9vbCBDb3BpZWRTcGFjZTo6Y29udGFpbnMo
dm9pZCogcHRyLCBDb3BpZWRCbG9jayomIHJlc3VsdCkKK3sKKyAgICBDb3BpZWRCbG9jayogYmxv
Y2sgPSBibG9ja0ZvcihwdHIpOworICAgIGlmIChjb250YWlucyhibG9jaykpIHsKKyAgICAgICAg
cmVzdWx0ID0gYmxvY2s7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBibG9jayA9
IG92ZXJzaXplQmxvY2tGb3IocHRyKTsKKyAgICByZXN1bHQgPSBibG9jazsKKyAgICByZXR1cm4g
Y29udGFpbnMoYmxvY2spOworfQorCitpbmxpbmUgdm9pZCBDb3BpZWRTcGFjZTo6cGluKENvcGll
ZEJsb2NrKiBibG9jaykKK3sKKyAgICBibG9jay0+bV9pc1Bpbm5lZCA9IHRydWU7Cit9CisKK2lu
bGluZSB2b2lkIENvcGllZFNwYWNlOjpwaW5JZk5lY2Vzc2FyeSh2b2lkKiBvcGFxdWVQb2ludGVy
KQoreworICAgIC8vIFBvaW50ZXJzIGludG8gdGhlIGNvcGllZCBzcGFjZSBjb21lIGluIHRoZSBm
b2xsb3dpbmcgdmFyaWV0aWVzOgorICAgIC8vIDEpICBQb2ludGVycyB0byB0aGUgc3RhcnQgb2Yg
YSBzcGFuIG9mIG1lbW9yeS4gVGhpcyBpcyB0aGUgbW9zdAorICAgIC8vICAgICBuYXR1cmFsIHRo
b3VnaCBub3QgbmVjZXNzYXJpbHkgdGhlIG1vc3QgY29tbW9uLgorICAgIC8vIDIpICBQb2ludGVy
cyB0byBvbmUgdmFsdWUtc2l6ZWQgKDggYnl0ZSkgd29yZCBwYXN0IHRoZSBlbmQgb2YKKyAgICAv
LyAgICAgYSBzcGFuIG9mIG1lbW9yeS4gVGhpcyBjdXJyZW50bHkgb2NjdXJzIHdpdGggc2VtaS1i
dXR0ZXJmbGllcworICAgIC8vICAgICBhbmQgc2hvdWxkIGJlIGZpeGVkIHNvb24sIG9uY2UgdGhl
IG90aGVyIGhhbGYgb2YgdGhlCisgICAgLy8gICAgIGJ1dHRlcmZseSBsYW5kcy4KKyAgICAvLyAz
KSAgUG9pbnRlcnMgdG8gdGhlIGlubmFyZHMgYXJpc2luZyBmcm9tIGxvb3AgaW5kdWN0aW9uIHZh
cmlhYmxlCisgICAgLy8gICAgIG9wdGltaXphdGlvbnMgKGVpdGhlciBtYW51YWwgb25lcyBvciBh
dXRvbWF0aWMsIGJ5IHRoZQorICAgIC8vICAgICBjb21waWxlcikuCisgICAgLy8gNCkgIFBvaW50
ZXJzIHRvIHRoZSBlbmQgb2YgYSBzcGFuIG9mIG1lbW9yeSBpbiBhcmlzaW5nIGZyb20KKyAgICAv
LyAgICAgaW5kdWN0aW9uIHZhcmlhYmxlIG9wdGltaXphdGlvbnMgY29tYmluZWQgd2l0aCB0aGUK
KyAgICAvLyAgICAgR0MtdG8tY29tcGlsZXIgY29udHJhY3QgbGFpZCBvdXQgaW4gdGhlIEMgc3Bl
YzogYSBwb2ludGVyIHRvCisgICAgLy8gICAgIHRoZSBlbmQgb2YgYSBzcGFuIG9mIG1lbW9yeSBt
dXN0IGJlIGNvbnNpZGVyZWQgdG8gYmUgYQorICAgIC8vICAgICBwb2ludGVyIHRvIHRoYXQgbWVt
b3J5LgorICAgIAorICAgIEVuY29kZWRKU1ZhbHVlKiBwb2ludGVyID0gcmVpbnRlcnByZXRfY2Fz
dDxFbmNvZGVkSlNWYWx1ZSo+KG9wYXF1ZVBvaW50ZXIpOworICAgIENvcGllZEJsb2NrKiBibG9j
azsKKworICAgIC8vIEhhbmRsZSAoMSkgYW5kICgzKS4KKyAgICBpZiAoY29udGFpbnMocG9pbnRl
ciwgYmxvY2spKQorICAgICAgICBwaW4oYmxvY2spOworICAgIAorICAgIC8vIEhhbmRsZSAoNCku
IFdlIGRvbid0IGhhdmUgdG8gZXhwbGljaXRseSBjaGVjayBhbmQgcGluIHRoZSBibG9jayB1bmRl
ciB0aGlzCisgICAgLy8gcG9pbnRlciBiZWNhdXNlIGl0IGNhbm5vdCBwb3NzaWJseSBwb2ludCB0
byBzb21ldGhpbmcgdGhhdCBjYXNlcyAoMSkgYW5kCisgICAgLy8gKDMpIGFib3ZlIG9yIGNhc2Ug
KDIpIGJlbG93IHdvdWxkbid0IGFscmVhZHkgY2F0Y2guCisgICAgcG9pbnRlci0tOworICAgIAor
ICAgIC8vIEhhbmRsZSAoMikKKyAgICBwb2ludGVyLS07CisgICAgaWYgKGNvbnRhaW5zKHBvaW50
ZXIsIGJsb2NrKSkKKyAgICAgICAgcGluKGJsb2NrKTsKK30KKworaW5saW5lIHZvaWQgQ29waWVk
U3BhY2U6OnJlY3ljbGVFdmFjdWF0ZWRCbG9jayhDb3BpZWRCbG9jayogYmxvY2spCit7CisgICAg
QVNTRVJUKGJsb2NrKTsKKyAgICBBU1NFUlQoYmxvY2stPmNhbkJlUmVjeWNsZWQoKSk7CisgICAg
QVNTRVJUKCFibG9jay0+bV9pc1Bpbm5lZCk7CisgICAgeworICAgICAgICBTcGluTG9ja0hvbGRl
ciBsb2NrZXIoJm1fdG9TcGFjZUxvY2spOworICAgICAgICBtX2Jsb2NrU2V0LnJlbW92ZShibG9j
ayk7CisgICAgICAgIG1fZnJvbVNwYWNlLT5yZW1vdmUoYmxvY2spOworICAgIH0KKyAgICBtX2hl
YXAtPmJsb2NrQWxsb2NhdG9yKCkuZGVhbGxvY2F0ZShDb3BpZWRCbG9jazo6ZGVzdHJveShibG9j
aykpOworfQorCitpbmxpbmUgdm9pZCBDb3BpZWRTcGFjZTo6cmVjeWNsZUJvcnJvd2VkQmxvY2so
Q29waWVkQmxvY2sqIGJsb2NrKQoreworICAgIG1faGVhcC0+YmxvY2tBbGxvY2F0b3IoKS5kZWFs
bG9jYXRlKENvcGllZEJsb2NrOjpkZXN0cm95KGJsb2NrKSk7CisKKyAgICB7CisgICAgICAgIE11
dGV4TG9ja2VyIGxvY2tlcihtX2xvYW5lZEJsb2Nrc0xvY2spOworICAgICAgICBBU1NFUlQobV9u
dW1iZXJPZkxvYW5lZEJsb2NrcyA+IDApOworICAgICAgICBBU1NFUlQobV9pbkNvcHlpbmdQaGFz
ZSk7CisgICAgICAgIG1fbnVtYmVyT2ZMb2FuZWRCbG9ja3MtLTsKKyAgICAgICAgaWYgKCFtX251
bWJlck9mTG9hbmVkQmxvY2tzKQorICAgICAgICAgICAgbV9sb2FuZWRCbG9ja3NDb25kaXRpb24u
c2lnbmFsKCk7CisgICAgfQorfQorCitpbmxpbmUgQ29waWVkQmxvY2sqIENvcGllZFNwYWNlOjph
bGxvY2F0ZUJsb2NrRm9yQ29weWluZ1BoYXNlKCkKK3sKKyAgICBBU1NFUlQobV9pbkNvcHlpbmdQ
aGFzZSk7CisgICAgQ29waWVkQmxvY2sqIGJsb2NrID0gQ29waWVkQmxvY2s6OmNyZWF0ZU5vWmVy
b0ZpbGwobV9oZWFwLT5ibG9ja0FsbG9jYXRvcigpLmFsbG9jYXRlPENvcGllZEJsb2NrPigpKTsK
KworICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbG9hbmVkQmxvY2tzTG9jayk7
CisgICAgICAgIG1fbnVtYmVyT2ZMb2FuZWRCbG9ja3MrKzsKKyAgICB9CisKKyAgICBBU1NFUlQo
IWJsb2NrLT5kYXRhU2l6ZSgpKTsKKyAgICByZXR1cm4gYmxvY2s7Cit9CisKK2lubGluZSB2b2lk
IENvcGllZFNwYWNlOjphbGxvY2F0ZUJsb2NrKCkKK3sKKyAgICBpZiAobV9oZWFwLT5zaG91bGRD
b2xsZWN0KCkpCisgICAgICAgIG1faGVhcC0+Y29sbGVjdChIZWFwOjpEb05vdFN3ZWVwKTsKKwor
ICAgIG1fYWxsb2NhdG9yLnJlc2V0Q3VycmVudEJsb2NrKCk7CisgICAgCisgICAgQ29waWVkQmxv
Y2sqIGJsb2NrID0gQ29waWVkQmxvY2s6OmNyZWF0ZShtX2hlYXAtPmJsb2NrQWxsb2NhdG9yKCku
YWxsb2NhdGU8Q29waWVkQmxvY2s+KCkpOworICAgICAgICAKKyAgICBtX3RvU3BhY2UtPnB1c2go
YmxvY2spOworICAgIG1fYmxvY2tGaWx0ZXIuYWRkKHJlaW50ZXJwcmV0X2Nhc3Q8Qml0cz4oYmxv
Y2spKTsKKyAgICBtX2Jsb2NrU2V0LmFkZChibG9jayk7CisgICAgbV9hbGxvY2F0b3Iuc2V0Q3Vy
cmVudEJsb2NrKGJsb2NrKTsKK30KKworaW5saW5lIENoZWNrZWRCb29sZWFuIENvcGllZFNwYWNl
Ojp0cnlBbGxvY2F0ZShzaXplX3QgYnl0ZXMsIHZvaWQqKiBvdXRQdHIpCit7CisgICAgQVNTRVJU
KCFtX2hlYXAtPmdsb2JhbERhdGEoKS0+aXNJbml0aWFsaXppbmdPYmplY3QoKSk7CisKKyAgICBp
ZiAoaXNPdmVyc2l6ZShieXRlcykgfHwgIW1fYWxsb2NhdG9yLnRyeUFsbG9jYXRlKGJ5dGVzLCBv
dXRQdHIpKQorICAgICAgICByZXR1cm4gdHJ5QWxsb2NhdGVTbG93Q2FzZShieXRlcywgb3V0UHRy
KTsKKyAgICAKKyAgICBBU1NFUlQoKm91dFB0cik7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2lu
bGluZSBib29sIENvcGllZFNwYWNlOjppc092ZXJzaXplKHNpemVfdCBieXRlcykKK3sKKyAgICBy
ZXR1cm4gYnl0ZXMgPiBzX21heEFsbG9jYXRpb25TaXplOworfQorCitpbmxpbmUgYm9vbCBDb3Bp
ZWRTcGFjZTo6aXNQaW5uZWQodm9pZCogcHRyKQoreworICAgIHJldHVybiBibG9ja0ZvcihwdHIp
LT5tX2lzUGlubmVkOworfQorCitpbmxpbmUgQ29waWVkQmxvY2sqIENvcGllZFNwYWNlOjpvdmVy
c2l6ZUJsb2NrRm9yKHZvaWQqIHB0cikKK3sKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxD
b3BpZWRCbG9jayo+KHJlaW50ZXJwcmV0X2Nhc3Q8c2l6ZV90PihwdHIpICYgV1RGOjpwYWdlTWFz
aygpKTsKK30KKworaW5saW5lIENvcGllZEJsb2NrKiBDb3BpZWRTcGFjZTo6YmxvY2tGb3Iodm9p
ZCogcHRyKQoreworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PENvcGllZEJsb2NrKj4ocmVp
bnRlcnByZXRfY2FzdDxzaXplX3Q+KHB0cikgJiBzX2Jsb2NrTWFzayk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Nv
cGllZFNwYWNlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0NvcGllZFNwYWNlSW5saW5lcy5oCShyZXZpc2lvbiAxMzMzODkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
MjMsOCArMjMsOCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBDb3BpZWRTcGFj
ZUlubGluZU1ldGhvZHNfaAotI2RlZmluZSBDb3BpZWRTcGFjZUlubGluZU1ldGhvZHNfaAorI2lm
bmRlZiBDb3BpZWRTcGFjZUlubGluZXNfaAorI2RlZmluZSBDb3BpZWRTcGFjZUlubGluZXNfaAog
CiAjaW5jbHVkZSAiQ29waWVkQmxvY2suaCIKICNpbmNsdWRlICJDb3BpZWRTcGFjZS5oIgpAQCAt
MTgyLDQgKzE4Miw1IEBAIGlubGluZSBDb3BpZWRCbG9jayogQ29waWVkU3BhY2U6OmJsb2NrRm8K
IAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKLSNlbmRpZgorI2VuZGlmIC8vIENvcGllZFNwYWNlSW5s
aW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlWaXNpdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5VmlzaXRvci5j
cHAJKHJldmlzaW9uIDEzMzk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlW
aXNpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIkNvcHlWaXNpdG9yLmgiCiAKLSNpbmNsdWRlICJDb3B5VmlzaXRv
cklubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJDb3B5VmlzaXRvcklubGluZXMuaCIKICNpbmNs
dWRlICJHQ1RocmVhZFNoYXJlZERhdGEuaCIKICNpbmNsdWRlICJKU0NlbGwuaCIKICNpbmNsdWRl
ICJKU09iamVjdC5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVZpc2l0
b3JJbmxpbmVNZXRob2RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQ29weVZpc2l0b3JJbmxpbmVNZXRob2RzLmgJKHJldmlzaW9uIDEzMzk2NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlWaXNpdG9ySW5saW5lTWV0aG9kcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDExOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBDb3B5VmlzaXRv
cklubGluZU1ldGhvZHNfaAotI2RlZmluZSBDb3B5VmlzaXRvcklubGluZU1ldGhvZHNfaAotCi0j
aW5jbHVkZSAiQ2xhc3NJbmZvLmgiCi0jaW5jbHVkZSAiQ29weVZpc2l0b3IuaCIKLSNpbmNsdWRl
ICJHQ1RocmVhZFNoYXJlZERhdGEuaCIKLSNpbmNsdWRlICJKU0NlbGwuaCIKLSNpbmNsdWRlICJK
U0Rlc3RydWN0aWJsZU9iamVjdC5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgR0NDb3B5
UGhhc2VGdW5jdG9yIDogcHVibGljIE1hcmtlZEJsb2NrOjpWb2lkRnVuY3RvciB7Ci1wdWJsaWM6
Ci0gICAgR0NDb3B5UGhhc2VGdW5jdG9yKENvcHlWaXNpdG9yJiB2aXNpdG9yKQotICAgICAgICA6
IG1fdmlzaXRvcih2aXNpdG9yKQotICAgIHsKLSAgICB9Ci0KLSAgICB2b2lkIG9wZXJhdG9yKCko
SlNDZWxsKiBjZWxsKQotICAgIHsKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjZWxs
LT5zdHJ1Y3R1cmUoKTsKLSAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5
KCkgJiYgIWhhc0luZGV4ZWRQcm9wZXJ0aWVzKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKQot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBBU1NFUlQoc3RydWN0dXJlLT5jbGFzc0luZm8o
KS0+bWV0aG9kVGFibGUuY29weUJhY2tpbmdTdG9yZSA9PSBKU09iamVjdDo6Y29weUJhY2tpbmdT
dG9yZSk7Ci0gICAgICAgIEpTT2JqZWN0Ojpjb3B5QmFja2luZ1N0b3JlKGNlbGwsIG1fdmlzaXRv
cik7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIENvcHlWaXNpdG9yJiBtX3Zpc2l0b3I7Ci19Owot
Ci1pbmxpbmUgYm9vbCBDb3B5VmlzaXRvcjo6Y2hlY2tJZlNob3VsZENvcHkodm9pZCogb2xkUHRy
LCBzaXplX3QgYnl0ZXMpCi17Ci0gICAgaWYgKENvcGllZFNwYWNlOjppc092ZXJzaXplKGJ5dGVz
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKENvcGllZFNwYWNlOjpibG9ja0Zv
cihvbGRQdHIpLT5pc1Bpbm5lZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotaW5saW5lIHZvaWQqIENvcHlWaXNpdG9yOjphbGxvY2F0ZU5ld1NwYWNl
KHNpemVfdCBieXRlcykKLXsKLSAgICB2b2lkKiByZXN1bHQgPSAwOyAvLyBDb21waWxlcnMgZG9u
J3QgcmVhbGl6ZSB0aGF0IHRoaXMgd2lsbCBiZSBhc3NpZ25lZC4KLSAgICBpZiAoTElLRUxZKG1f
Y29waWVkQWxsb2NhdG9yLnRyeUFsbG9jYXRlKGJ5dGVzLCAmcmVzdWx0KSkpCi0gICAgICAgIHJl
dHVybiByZXN1bHQ7Ci0gICAgCi0gICAgcmVzdWx0ID0gYWxsb2NhdGVOZXdTcGFjZVNsb3coYnl0
ZXMpOwotICAgIEFTU0VSVChyZXN1bHQpOwotICAgIHJldHVybiByZXN1bHQ7Ci19ICAgICAgIAot
Ci1pbmxpbmUgdm9pZCogQ29weVZpc2l0b3I6OmFsbG9jYXRlTmV3U3BhY2VTbG93KHNpemVfdCBi
eXRlcykKLXsKLSAgICBDb3BpZWRCbG9jayogbmV3QmxvY2sgPSAwOwotICAgIG1fc2hhcmVkLm1f
Y29waWVkU3BhY2UtPmRvbmVGaWxsaW5nQmxvY2sobV9jb3BpZWRBbGxvY2F0b3IucmVzZXRDdXJy
ZW50QmxvY2soKSwgJm5ld0Jsb2NrKTsKLSAgICBtX2NvcGllZEFsbG9jYXRvci5zZXRDdXJyZW50
QmxvY2sobmV3QmxvY2spOwotCi0gICAgdm9pZCogcmVzdWx0ID0gMDsKLSAgICBDaGVja2VkQm9v
bGVhbiBkaWRTdWNjZWVkID0gbV9jb3BpZWRBbGxvY2F0b3IudHJ5QWxsb2NhdGUoYnl0ZXMsICZy
ZXN1bHQpOwotICAgIEFTU0VSVChkaWRTdWNjZWVkKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQot
Ci1pbmxpbmUgdm9pZCBDb3B5VmlzaXRvcjo6c3RhcnRDb3B5aW5nKCkKLXsKLSAgICBBU1NFUlQo
IW1fY29waWVkQWxsb2NhdG9yLmlzVmFsaWQoKSk7Ci0gICAgQ29waWVkQmxvY2sqIGJsb2NrID0g
MDsKLSAgICBtX3NoYXJlZC5tX2NvcGllZFNwYWNlLT5kb25lRmlsbGluZ0Jsb2NrKG1fY29waWVk
QWxsb2NhdG9yLnJlc2V0Q3VycmVudEJsb2NrKCksICZibG9jayk7Ci0gICAgbV9jb3BpZWRBbGxv
Y2F0b3Iuc2V0Q3VycmVudEJsb2NrKGJsb2NrKTsKLX0KLQotaW5saW5lIHZvaWQgQ29weVZpc2l0
b3I6OmRvbmVDb3B5aW5nKCkKLXsKLSAgICBpZiAoIW1fY29waWVkQWxsb2NhdG9yLmlzVmFsaWQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zaGFyZWQubV9jb3BpZWRTcGFjZS0+ZG9uZUZp
bGxpbmdCbG9jayhtX2NvcGllZEFsbG9jYXRvci5yZXNldEN1cnJlbnRCbG9jaygpLCAwKTsKLX0K
LQotaW5saW5lIHZvaWQgQ29weVZpc2l0b3I6OmRpZENvcHkodm9pZCogcHRyLCBzaXplX3QgYnl0
ZXMpCi17Ci0gICAgQVNTRVJUKCFDb3BpZWRTcGFjZTo6aXNPdmVyc2l6ZShieXRlcykpOwotICAg
IENvcGllZEJsb2NrKiBibG9jayA9IENvcGllZFNwYWNlOjpibG9ja0ZvcihwdHIpOwotICAgIEFT
U0VSVCghYmxvY2stPmlzUGlubmVkKCkpOwotCi0gICAgaWYgKGJsb2NrLT5kaWRFdmFjdWF0ZUJ5
dGVzKGJ5dGVzKSkKLSAgICAgICAgbV9zaGFyZWQubV9jb3BpZWRTcGFjZS0+cmVjeWNsZUV2YWN1
YXRlZEJsb2NrKGJsb2NrKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVZpc2l0b3JJbmxpbmVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVZpc2l0b3JJbmxpbmVzLmgJ
KHJldmlzaW9uIDEzMzM4OSkJKGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVZp
c2l0b3JJbmxpbmVNZXRob2RzLmg6MTMzMzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQ29weVZpc2l0b3JJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTkgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIENvcHlWaXNpdG9ySW5saW5lTWV0aG9kc19oCisjZGVmaW5l
IENvcHlWaXNpdG9ySW5saW5lTWV0aG9kc19oCisKKyNpbmNsdWRlICJDbGFzc0luZm8uaCIKKyNp
bmNsdWRlICJDb3B5VmlzaXRvci5oIgorI2luY2x1ZGUgIkdDVGhyZWFkU2hhcmVkRGF0YS5oIgor
I2luY2x1ZGUgIkpTQ2VsbC5oIgorI2luY2x1ZGUgIkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LmgiCisK
K25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBHQ0NvcHlQaGFzZUZ1bmN0b3IgOiBwdWJsaWMgTWFy
a2VkQmxvY2s6OlZvaWRGdW5jdG9yIHsKK3B1YmxpYzoKKyAgICBHQ0NvcHlQaGFzZUZ1bmN0b3Io
Q29weVZpc2l0b3ImIHZpc2l0b3IpCisgICAgICAgIDogbV92aXNpdG9yKHZpc2l0b3IpCisgICAg
eworICAgIH0KKworICAgIHZvaWQgb3BlcmF0b3IoKShKU0NlbGwqIGNlbGwpCisgICAgeworICAg
ICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNlbGwtPnN0cnVjdHVyZSgpOworICAgICAgICBp
ZiAoIXN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAmJiAhaGFzSW5kZXhlZFByb3BlcnRp
ZXMoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIEFTU0VSVChzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLT5tZXRob2RUYWJsZS5jb3B5QmFja2lu
Z1N0b3JlID09IEpTT2JqZWN0Ojpjb3B5QmFja2luZ1N0b3JlKTsKKyAgICAgICAgSlNPYmplY3Q6
OmNvcHlCYWNraW5nU3RvcmUoY2VsbCwgbV92aXNpdG9yKTsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgQ29weVZpc2l0b3ImIG1fdmlzaXRvcjsKK307CisKK2lubGluZSBib29sIENvcHlWaXNpdG9y
OjpjaGVja0lmU2hvdWxkQ29weSh2b2lkKiBvbGRQdHIsIHNpemVfdCBieXRlcykKK3sKKyAgICBp
ZiAoQ29waWVkU3BhY2U6OmlzT3ZlcnNpemUoYnl0ZXMpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBpZiAoQ29waWVkU3BhY2U6OmJsb2NrRm9yKG9sZFB0ciktPmlzUGlubmVkKCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQorCitpbmxpbmUgdm9p
ZCogQ29weVZpc2l0b3I6OmFsbG9jYXRlTmV3U3BhY2Uoc2l6ZV90IGJ5dGVzKQoreworICAgIHZv
aWQqIHJlc3VsdCA9IDA7IC8vIENvbXBpbGVycyBkb24ndCByZWFsaXplIHRoYXQgdGhpcyB3aWxs
IGJlIGFzc2lnbmVkLgorICAgIGlmIChMSUtFTFkobV9jb3BpZWRBbGxvY2F0b3IudHJ5QWxsb2Nh
dGUoYnl0ZXMsICZyZXN1bHQpKSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAKKyAgICBy
ZXN1bHQgPSBhbGxvY2F0ZU5ld1NwYWNlU2xvdyhieXRlcyk7CisgICAgQVNTRVJUKHJlc3VsdCk7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30gICAgICAgCisKK2lubGluZSB2b2lkKiBDb3B5VmlzaXRv
cjo6YWxsb2NhdGVOZXdTcGFjZVNsb3coc2l6ZV90IGJ5dGVzKQoreworICAgIENvcGllZEJsb2Nr
KiBuZXdCbG9jayA9IDA7CisgICAgbV9zaGFyZWQubV9jb3BpZWRTcGFjZS0+ZG9uZUZpbGxpbmdC
bG9jayhtX2NvcGllZEFsbG9jYXRvci5yZXNldEN1cnJlbnRCbG9jaygpLCAmbmV3QmxvY2spOwor
ICAgIG1fY29waWVkQWxsb2NhdG9yLnNldEN1cnJlbnRCbG9jayhuZXdCbG9jayk7CisKKyAgICB2
b2lkKiByZXN1bHQgPSAwOworICAgIENoZWNrZWRCb29sZWFuIGRpZFN1Y2NlZWQgPSBtX2NvcGll
ZEFsbG9jYXRvci50cnlBbGxvY2F0ZShieXRlcywgJnJlc3VsdCk7CisgICAgQVNTRVJUKGRpZFN1
Y2NlZWQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2lubGluZSB2b2lkIENvcHlWaXNpdG9y
OjpzdGFydENvcHlpbmcoKQoreworICAgIEFTU0VSVCghbV9jb3BpZWRBbGxvY2F0b3IuaXNWYWxp
ZCgpKTsKKyAgICBDb3BpZWRCbG9jayogYmxvY2sgPSAwOworICAgIG1fc2hhcmVkLm1fY29waWVk
U3BhY2UtPmRvbmVGaWxsaW5nQmxvY2sobV9jb3BpZWRBbGxvY2F0b3IucmVzZXRDdXJyZW50Qmxv
Y2soKSwgJmJsb2NrKTsKKyAgICBtX2NvcGllZEFsbG9jYXRvci5zZXRDdXJyZW50QmxvY2soYmxv
Y2spOworfQorCitpbmxpbmUgdm9pZCBDb3B5VmlzaXRvcjo6ZG9uZUNvcHlpbmcoKQoreworICAg
IGlmICghbV9jb3BpZWRBbGxvY2F0b3IuaXNWYWxpZCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBtX3NoYXJlZC5tX2NvcGllZFNwYWNlLT5kb25lRmlsbGluZ0Jsb2NrKG1fY29waWVkQWxsb2Nh
dG9yLnJlc2V0Q3VycmVudEJsb2NrKCksIDApOworfQorCitpbmxpbmUgdm9pZCBDb3B5VmlzaXRv
cjo6ZGlkQ29weSh2b2lkKiBwdHIsIHNpemVfdCBieXRlcykKK3sKKyAgICBBU1NFUlQoIUNvcGll
ZFNwYWNlOjppc092ZXJzaXplKGJ5dGVzKSk7CisgICAgQ29waWVkQmxvY2sqIGJsb2NrID0gQ29w
aWVkU3BhY2U6OmJsb2NrRm9yKHB0cik7CisgICAgQVNTRVJUKCFibG9jay0+aXNQaW5uZWQoKSk7
CisKKyAgICBpZiAoYmxvY2stPmRpZEV2YWN1YXRlQnl0ZXMoYnl0ZXMpKQorICAgICAgICBtX3No
YXJlZC5tX2NvcGllZFNwYWNlLT5yZWN5Y2xlRXZhY3VhdGVkQmxvY2soYmxvY2spOworfQorCit9
IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9Db3B5VmlzaXRvcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9Db3B5VmlzaXRvcklubGluZXMuaAkocmV2aXNpb24gMTMzMzg5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVZpc2l0b3JJbmxpbmVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTIzLDggKzIzLDggQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
ICAqLwogCi0jaWZuZGVmIENvcHlWaXNpdG9ySW5saW5lTWV0aG9kc19oCi0jZGVmaW5lIENvcHlW
aXNpdG9ySW5saW5lTWV0aG9kc19oCisjaWZuZGVmIENvcHlWaXNpdG9ySW5saW5lc19oCisjZGVm
aW5lIENvcHlWaXNpdG9ySW5saW5lc19oCiAKICNpbmNsdWRlICJDbGFzc0luZm8uaCIKICNpbmNs
dWRlICJDb3B5VmlzaXRvci5oIgpAQCAtMTE2LDQgKzExNiw1IEBAIGlubGluZSB2b2lkIENvcHlW
aXNpdG9yOjpkaWRDb3B5KHZvaWQqIHAKIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKLSNlbmRpZgor
I2VuZGlmIC8vIENvcHlWaXNpdG9ySW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0dDVGhyZWFkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9HQ1RocmVhZC5jcHAJKHJldmlzaW9uIDEzMzk2NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0dDVGhyZWFkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBA
QAogI2luY2x1ZGUgIkdDVGhyZWFkLmgiCiAKICNpbmNsdWRlICJDb3B5VmlzaXRvci5oIgotI2lu
Y2x1ZGUgIkNvcHlWaXNpdG9ySW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkNvcHlWaXNpdG9y
SW5saW5lcy5oIgogI2luY2x1ZGUgIkdDVGhyZWFkU2hhcmVkRGF0YS5oIgogI2luY2x1ZGUgIlNs
b3RWaXNpdG9yLmgiCiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0dDVGhyZWFkU2hhcmVkRGF0YS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NUaHJlYWRTaGFyZWREYXRhLmNwcAkocmV2aXNp
b24gMTMzOTY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NUaHJlYWRTaGFyZWRE
YXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsMTIgKzI3LDEyIEBACiAjaW5jbHVkZSAiR0NU
aHJlYWRTaGFyZWREYXRhLmgiCiAKICNpbmNsdWRlICJDb3B5VmlzaXRvci5oIgotI2luY2x1ZGUg
IkNvcHlWaXNpdG9ySW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkNvcHlWaXNpdG9ySW5saW5l
cy5oIgogI2luY2x1ZGUgIkdDVGhyZWFkLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgiCiAj
aW5jbHVkZSAiTWFya1N0YWNrLmgiCiAjaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKLSNpbmNsdWRl
ICJTbG90VmlzaXRvcklubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJTbG90VmlzaXRvcklubGlu
ZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hhbmRsZVN0YWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9IYW5kbGVTdGFjay5jcHAJKHJldmlzaW9uIDEzMzk2NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hhbmRsZVN0YWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsOCArMjcs
OCBAQAogI2luY2x1ZGUgIkhhbmRsZVN0YWNrLmgiCiAKICNpbmNsdWRlICJIZWFwUm9vdFZpc2l0
b3IuaCIKLSNpbmNsdWRlICJKU1ZhbHVlSW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUgIkpTT2Jq
ZWN0LmgiCisjaW5jbHVkZSAiSlNWYWx1ZUlubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lvbiAxMzM5NjUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjQsOCArMjQsOCBAQAogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkNvbnNlcnZh
dGl2ZVJvb3RzLmgiCiAjaW5jbHVkZSAiQ29waWVkU3BhY2UuaCIKLSNpbmNsdWRlICJDb3BpZWRT
cGFjZUlubGluZU1ldGhvZHMuaCIKLSNpbmNsdWRlICJDb3B5VmlzaXRvcklubGluZU1ldGhvZHMu
aCIKKyNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZXMuaCIKKyNpbmNsdWRlICJDb3B5VmlzaXRv
cklubGluZXMuaCIKICNpbmNsdWRlICJHQ0FjdGl2aXR5Q2FsbGJhY2suaCIKICNpbmNsdWRlICJI
ZWFwUm9vdFZpc2l0b3IuaCIKICNpbmNsdWRlICJIZWFwU3RhdGlzdGljcy5oIgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFJvb3RWaXNpdG9yLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFJvb3RWaXNpdG9yLmgJKHJldmlzaW9uIDEz
Mzk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBSb290VmlzaXRvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAjZGVmaW5lIEhlYXBSb290VmlzaXRvcl9o
CiAKICNpbmNsdWRlICJTbG90VmlzaXRvci5oIgotI2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5l
TWV0aG9kcy5oIgorI2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5lcy5oIgogCiBuYW1lc3BhY2Ug
SlNDIHsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2suY3BwCShy
ZXZpc2lvbiAxMzM5NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2su
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxOCArMjUsMTggQEAKIAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIk1hcmtTdGFjay5oIgotI2luY2x1ZGUgIk1hcmtTdGFja0lubGluZU1l
dGhvZHMuaCIKKyNpbmNsdWRlICJNYXJrU3RhY2tJbmxpbmVzLmgiCiAKLSNpbmNsdWRlICJDb3Bp
ZWRTcGFjZS5oIgotI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oIgogI2luY2x1
ZGUgIkNvbnNlcnZhdGl2ZVJvb3RzLmgiCisjaW5jbHVkZSAiQ29waWVkU3BhY2UuaCIKKyNpbmNs
dWRlICJDb3BpZWRTcGFjZUlubGluZXMuaCIKICNpbmNsdWRlICJIZWFwLmgiCiAjaW5jbHVkZSAi
T3B0aW9ucy5oIgogI2luY2x1ZGUgIkpTQXJyYXkuaCIKICNpbmNsdWRlICJKU0NlbGwuaCIKICNp
bmNsdWRlICJKU09iamVjdC5oIgogCi0jaW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVNZXRob2Rz
LmgiCisjaW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJl
LmgiCiAjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCiAjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFja0lubGluZU1ldGhvZHMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2tJbmxp
bmVNZXRob2RzLmgJKHJldmlzaW9uIDEzMzk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtTdGFja0lubGluZU1ldGhvZHMuaAkod29ya2luZyBjb3B5KQpAQCAtMSwxMTMgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwot
Ci0jaWZuZGVmIE1hcmtTdGFja0lubGluZU1ldGhvZHNfaAotI2RlZmluZSBNYXJrU3RhY2tJbmxp
bmVNZXRob2RzX2gKLQotI2luY2x1ZGUgIkdDVGhyZWFkU2hhcmVkRGF0YS5oIgotI2luY2x1ZGUg
Ik1hcmtTdGFjay5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotaW5saW5lIHNpemVfdCBNYXJrU3Rh
Y2tBcnJheTo6cG9zdEluY1RvcCgpCi17Ci0gICAgc2l6ZV90IHJlc3VsdCA9IG1fdG9wKys7Ci0g
ICAgQVNTRVJUKHJlc3VsdCA9PSBtX3RvcFNlZ21lbnQtPm1fdG9wKyspOwotICAgIHJldHVybiBy
ZXN1bHQ7Ci19Ci0gICAgICAgIAotaW5saW5lIHNpemVfdCBNYXJrU3RhY2tBcnJheTo6cHJlRGVj
VG9wKCkKLXsKLSAgICBzaXplX3QgcmVzdWx0ID0gLS1tX3RvcDsKLSAgICBBU1NFUlQocmVzdWx0
ID09IC0tbV90b3BTZWdtZW50LT5tX3RvcCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLSAgICAg
ICAgCi1pbmxpbmUgdm9pZCBNYXJrU3RhY2tBcnJheTo6c2V0VG9wRm9yRnVsbFNlZ21lbnQoKQot
ewotICAgIEFTU0VSVChtX3RvcFNlZ21lbnQtPm1fdG9wID09IG1fc2VnbWVudENhcGFjaXR5KTsK
LSAgICBtX3RvcCA9IG1fc2VnbWVudENhcGFjaXR5OwotfQotCi1pbmxpbmUgdm9pZCBNYXJrU3Rh
Y2tBcnJheTo6c2V0VG9wRm9yRW1wdHlTZWdtZW50KCkKLXsKLSAgICBBU1NFUlQoIW1fdG9wU2Vn
bWVudC0+bV90b3ApOwotICAgIG1fdG9wID0gMDsKLX0KLQotaW5saW5lIHNpemVfdCBNYXJrU3Rh
Y2tBcnJheTo6dG9wKCkKLXsKLSAgICBBU1NFUlQobV90b3AgPT0gbV90b3BTZWdtZW50LT5tX3Rv
cCk7Ci0gICAgcmV0dXJuIG1fdG9wOwotfQotCi0jaWYgQVNTRVJUX0RJU0FCTEVECi1pbmxpbmUg
dm9pZCBNYXJrU3RhY2tBcnJheTo6dmFsaWRhdGVQcmV2aW91cygpIHsgfQotI2Vsc2UKLWlubGlu
ZSB2b2lkIE1hcmtTdGFja0FycmF5Ojp2YWxpZGF0ZVByZXZpb3VzKCkKLXsKLSAgICB1bnNpZ25l
ZCBjb3VudCA9IDA7Ci0gICAgZm9yIChNYXJrU3RhY2tTZWdtZW50KiBjdXJyZW50ID0gbV90b3BT
ZWdtZW50LT5tX3ByZXZpb3VzOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+bV9wcmV2aW91
cykKLSAgICAgICAgY291bnQrKzsKLSAgICBBU1NFUlQoY291bnQgPT0gbV9udW1iZXJPZlByZXZp
b3VzU2VnbWVudHMpOwotfQotI2VuZGlmCi0KLWlubGluZSB2b2lkIE1hcmtTdGFja0FycmF5Ojph
cHBlbmQoY29uc3QgSlNDZWxsKiBjZWxsKQotewotICAgIGlmIChtX3RvcCA9PSBtX3NlZ21lbnRD
YXBhY2l0eSkKLSAgICAgICAgZXhwYW5kKCk7Ci0gICAgbV90b3BTZWdtZW50LT5kYXRhKClbcG9z
dEluY1RvcCgpXSA9IGNlbGw7Ci19Ci0KLWlubGluZSBib29sIE1hcmtTdGFja0FycmF5OjpjYW5S
ZW1vdmVMYXN0KCkKLXsKLSAgICByZXR1cm4gISFtX3RvcDsKLX0KLQotaW5saW5lIGNvbnN0IEpT
Q2VsbCogTWFya1N0YWNrQXJyYXk6OnJlbW92ZUxhc3QoKQotewotICAgIHJldHVybiBtX3RvcFNl
Z21lbnQtPmRhdGEoKVtwcmVEZWNUb3AoKV07Ci19Ci0KLWlubGluZSBib29sIE1hcmtTdGFja0Fy
cmF5Ojppc0VtcHR5KCkKLXsKLSAgICBpZiAobV90b3ApCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBpZiAobV90b3BTZWdtZW50LT5tX3ByZXZpb3VzKSB7Ci0gICAgICAgIEFTU0VSVChtX3Rv
cFNlZ21lbnQtPm1fcHJldmlvdXMtPm1fdG9wID09IG1fc2VnbWVudENhcGFjaXR5KTsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotaW5saW5lIHNp
emVfdCBNYXJrU3RhY2tBcnJheTo6c2l6ZSgpCi17Ci0gICAgcmV0dXJuIG1fdG9wICsgbV9zZWdt
ZW50Q2FwYWNpdHkgKiBtX251bWJlck9mUHJldmlvdXNTZWdtZW50czsKLX0KLQotfSAvLyBuYW1l
c3BhY2UgSlNDCi0KLSNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a1N0YWNrSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtTdGFja0lubGluZXMuaAkocmV2aXNpb24gMTMzMzg5KQkoZnJvbSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJrU3RhY2tJbmxpbmVNZXRob2RzLmg6MTMzMzg5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTEzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDExIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgTWFya1N0YWNrSW5saW5lTWV0aG9kc19oCisjZGVmaW5lIE1h
cmtTdGFja0lubGluZU1ldGhvZHNfaAorCisjaW5jbHVkZSAiR0NUaHJlYWRTaGFyZWREYXRhLmgi
CisjaW5jbHVkZSAiTWFya1N0YWNrLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitpbmxpbmUgc2l6
ZV90IE1hcmtTdGFja0FycmF5Ojpwb3N0SW5jVG9wKCkKK3sKKyAgICBzaXplX3QgcmVzdWx0ID0g
bV90b3ArKzsKKyAgICBBU1NFUlQocmVzdWx0ID09IG1fdG9wU2VnbWVudC0+bV90b3ArKyk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKyAgICAgICAgCitpbmxpbmUgc2l6ZV90IE1hcmtTdGFja0Fy
cmF5OjpwcmVEZWNUb3AoKQoreworICAgIHNpemVfdCByZXN1bHQgPSAtLW1fdG9wOworICAgIEFT
U0VSVChyZXN1bHQgPT0gLS1tX3RvcFNlZ21lbnQtPm1fdG9wKTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorICAgICAgICAKK2lubGluZSB2b2lkIE1hcmtTdGFja0FycmF5OjpzZXRUb3BGb3JGdWxs
U2VnbWVudCgpCit7CisgICAgQVNTRVJUKG1fdG9wU2VnbWVudC0+bV90b3AgPT0gbV9zZWdtZW50
Q2FwYWNpdHkpOworICAgIG1fdG9wID0gbV9zZWdtZW50Q2FwYWNpdHk7Cit9CisKK2lubGluZSB2
b2lkIE1hcmtTdGFja0FycmF5OjpzZXRUb3BGb3JFbXB0eVNlZ21lbnQoKQoreworICAgIEFTU0VS
VCghbV90b3BTZWdtZW50LT5tX3RvcCk7CisgICAgbV90b3AgPSAwOworfQorCitpbmxpbmUgc2l6
ZV90IE1hcmtTdGFja0FycmF5Ojp0b3AoKQoreworICAgIEFTU0VSVChtX3RvcCA9PSBtX3RvcFNl
Z21lbnQtPm1fdG9wKTsKKyAgICByZXR1cm4gbV90b3A7Cit9CisKKyNpZiBBU1NFUlRfRElTQUJM
RUQKK2lubGluZSB2b2lkIE1hcmtTdGFja0FycmF5Ojp2YWxpZGF0ZVByZXZpb3VzKCkgeyB9Cisj
ZWxzZQoraW5saW5lIHZvaWQgTWFya1N0YWNrQXJyYXk6OnZhbGlkYXRlUHJldmlvdXMoKQorewor
ICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKKyAgICBmb3IgKE1hcmtTdGFja1NlZ21lbnQqIGN1cnJl
bnQgPSBtX3RvcFNlZ21lbnQtPm1fcHJldmlvdXM7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50
LT5tX3ByZXZpb3VzKQorICAgICAgICBjb3VudCsrOworICAgIEFTU0VSVChjb3VudCA9PSBtX251
bWJlck9mUHJldmlvdXNTZWdtZW50cyk7Cit9CisjZW5kaWYKKworaW5saW5lIHZvaWQgTWFya1N0
YWNrQXJyYXk6OmFwcGVuZChjb25zdCBKU0NlbGwqIGNlbGwpCit7CisgICAgaWYgKG1fdG9wID09
IG1fc2VnbWVudENhcGFjaXR5KQorICAgICAgICBleHBhbmQoKTsKKyAgICBtX3RvcFNlZ21lbnQt
PmRhdGEoKVtwb3N0SW5jVG9wKCldID0gY2VsbDsKK30KKworaW5saW5lIGJvb2wgTWFya1N0YWNr
QXJyYXk6OmNhblJlbW92ZUxhc3QoKQoreworICAgIHJldHVybiAhIW1fdG9wOworfQorCitpbmxp
bmUgY29uc3QgSlNDZWxsKiBNYXJrU3RhY2tBcnJheTo6cmVtb3ZlTGFzdCgpCit7CisgICAgcmV0
dXJuIG1fdG9wU2VnbWVudC0+ZGF0YSgpW3ByZURlY1RvcCgpXTsKK30KKworaW5saW5lIGJvb2wg
TWFya1N0YWNrQXJyYXk6OmlzRW1wdHkoKQoreworICAgIGlmIChtX3RvcCkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGlmIChtX3RvcFNlZ21lbnQtPm1fcHJldmlvdXMpIHsKKyAgICAgICAg
QVNTRVJUKG1fdG9wU2VnbWVudC0+bV9wcmV2aW91cy0+bV90b3AgPT0gbV9zZWdtZW50Q2FwYWNp
dHkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQor
CitpbmxpbmUgc2l6ZV90IE1hcmtTdGFja0FycmF5OjpzaXplKCkKK3sKKyAgICByZXR1cm4gbV90
b3AgKyBtX3NlZ21lbnRDYXBhY2l0eSAqIG1fbnVtYmVyT2ZQcmV2aW91c1NlZ21lbnRzOworfQor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJrU3RhY2tJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya1N0YWNrSW5saW5lcy5oCShyZXZpc2lvbiAxMzMzODkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTIzLDggKzIzLDggQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYgTWFya1N0
YWNrSW5saW5lTWV0aG9kc19oCi0jZGVmaW5lIE1hcmtTdGFja0lubGluZU1ldGhvZHNfaAorI2lm
bmRlZiBNYXJrU3RhY2tJbmxpbmVzX2gKKyNkZWZpbmUgTWFya1N0YWNrSW5saW5lc19oCiAKICNp
bmNsdWRlICJHQ1RocmVhZFNoYXJlZERhdGEuaCIKICNpbmNsdWRlICJNYXJrU3RhY2suaCIKQEAg
LTM3LDE0ICszNywxNCBAQCBpbmxpbmUgc2l6ZV90IE1hcmtTdGFja0FycmF5Ojpwb3N0SW5jVG9w
CiAgICAgQVNTRVJUKHJlc3VsdCA9PSBtX3RvcFNlZ21lbnQtPm1fdG9wKyspOwogICAgIHJldHVy
biByZXN1bHQ7CiB9Ci0gICAgICAgIAorCiBpbmxpbmUgc2l6ZV90IE1hcmtTdGFja0FycmF5Ojpw
cmVEZWNUb3AoKQogewogICAgIHNpemVfdCByZXN1bHQgPSAtLW1fdG9wOwogICAgIEFTU0VSVChy
ZXN1bHQgPT0gLS1tX3RvcFNlZ21lbnQtPm1fdG9wKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQot
ICAgICAgICAKKwogaW5saW5lIHZvaWQgTWFya1N0YWNrQXJyYXk6OnNldFRvcEZvckZ1bGxTZWdt
ZW50KCkKIHsKICAgICBBU1NFUlQobV90b3BTZWdtZW50LT5tX3RvcCA9PSBtX3NlZ21lbnRDYXBh
Y2l0eSk7CkBAIC0xMTAsNCArMTEwLDUgQEAgaW5saW5lIHNpemVfdCBNYXJrU3RhY2tBcnJheTo6
c2l6ZSgpCiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCi0jZW5kaWYKKyNlbmRpZiAvLyBNYXJrU3Rh
Y2tJbmxpbmVzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNp
dG9yLmNwcAkocmV2aXNpb24gMTMzOTY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
U2xvdFZpc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zLDcgKzMsNyBAQAogCiAjaW5jbHVk
ZSAiQ29uc2VydmF0aXZlUm9vdHMuaCIKICNpbmNsdWRlICJDb3BpZWRTcGFjZS5oIgotI2luY2x1
ZGUgIkNvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5s
aW5lcy5oIgogI2luY2x1ZGUgIkdDVGhyZWFkLmgiCiAjaW5jbHVkZSAiSlNBcnJheS5oIgogI2lu
Y2x1ZGUgIkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9TbG90VmlzaXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1Nsb3RWaXNpdG9yLmgJKHJldmlzaW9uIDEzMzk2NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcg
QEAKICNkZWZpbmUgU2xvdFZpc2l0b3JfaAogCiAjaW5jbHVkZSAiSGFuZGxlVHlwZXMuaCIKLSNp
bmNsdWRlICJNYXJrU3RhY2tJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiTWFya1N0YWNrSW5s
aW5lcy5oIgogCiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklubGluZU1ldGhvZHMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklubGluZU1ldGhv
ZHMuaAkocmV2aXNpb24gMTMzOTY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xv
dFZpc2l0b3JJbmxpbmVNZXRob2RzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTc0ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaWZuZGVmIFNsb3RWaXNpdG9ySW5saW5lTWV0aG9kc19oCi0jZGVmaW5l
IFNsb3RWaXNpdG9ySW5saW5lTWV0aG9kc19oCi0KLSNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGlu
ZU1ldGhvZHMuaCIKLSNpbmNsdWRlICJPcHRpb25zLmgiCi0jaW5jbHVkZSAiU2xvdFZpc2l0b3Iu
aCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6
YXBwZW5kKEpTVmFsdWUqIHNsb3QsIHNpemVfdCBjb3VudCkKLXsKLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgSlNWYWx1ZSYgdmFsdWUgPSBzbG90W2ld
OwotICAgICAgICBpbnRlcm5hbEFwcGVuZCh2YWx1ZSk7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBUPgotaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFVuYmFycmllcmVkUG9p
bnRlcihUKiogc2xvdCkKLXsKLSAgICBBU1NFUlQoc2xvdCk7Ci0gICAgSlNDZWxsKiBjZWxsID0g
KnNsb3Q7Ci0gICAgaW50ZXJuYWxBcHBlbmQoY2VsbCk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9p
ZCBTbG90VmlzaXRvcjo6YXBwZW5kKEpTVmFsdWUqIHNsb3QpCi17Ci0gICAgQVNTRVJUKHNsb3Qp
OwotICAgIGludGVybmFsQXBwZW5kKCpzbG90KTsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIFNs
b3RWaXNpdG9yOjphcHBlbmRVbmJhcnJpZXJlZFZhbHVlKEpTVmFsdWUqIHNsb3QpCi17Ci0gICAg
QVNTRVJUKHNsb3QpOwotICAgIGludGVybmFsQXBwZW5kKCpzbG90KTsKLX0KLQotQUxXQVlTX0lO
TElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmQoSlNDZWxsKiogc2xvdCkKLXsKLSAgICBBU1NF
UlQoc2xvdCk7Ci0gICAgaW50ZXJuYWxBcHBlbmQoKnNsb3QpOwotfQotCi1BTFdBWVNfSU5MSU5F
IHZvaWQgU2xvdFZpc2l0b3I6OmludGVybmFsQXBwZW5kKEpTVmFsdWUgdmFsdWUpCi17Ci0gICAg
aWYgKCF2YWx1ZSB8fCAhdmFsdWUuaXNDZWxsKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpbnRl
cm5hbEFwcGVuZCh2YWx1ZS5hc0NlbGwoKSk7Ci19Ci0KLWlubGluZSB2b2lkIFNsb3RWaXNpdG9y
OjphZGRXZWFrUmVmZXJlbmNlSGFydmVzdGVyKFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIqIHdlYWtS
ZWZlcmVuY2VIYXJ2ZXN0ZXIpCi17Ci0gICAgbV9zaGFyZWQubV93ZWFrUmVmZXJlbmNlSGFydmVz
dGVycy5hZGRUaHJlYWRTYWZlKHdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIpOwotfQotCi1pbmxpbmUg
dm9pZCBTbG90VmlzaXRvcjo6YWRkVW5jb25kaXRpb25hbEZpbmFsaXplcihVbmNvbmRpdGlvbmFs
RmluYWxpemVyKiB1bmNvbmRpdGlvbmFsRmluYWxpemVyKQotewotICAgIG1fc2hhcmVkLm1fdW5j
b25kaXRpb25hbEZpbmFsaXplcnMuYWRkVGhyZWFkU2FmZSh1bmNvbmRpdGlvbmFsRmluYWxpemVy
KTsKLX0KLQotaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OmFkZE9wYXF1ZVJvb3Qodm9pZCogcm9v
dCkKLXsKLSNpZiBFTkFCTEUoUEFSQUxMRUxfR0MpCi0gICAgaWYgKE9wdGlvbnM6Om51bWJlck9m
R0NNYXJrZXJzKCkgPT0gMSkgewotICAgICAgICAvLyBQdXQgZGlyZWN0bHkgaW50byB0aGUgc2hh
cmVkIEhhc2hTZXQuCi0gICAgICAgIG1fc2hhcmVkLm1fb3BhcXVlUm9vdHMuYWRkKHJvb3QpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIC8vIFB1dCBpbnRvIHRoZSBsb2NhbCBzZXQsIGJ1
dCBtZXJnZSB3aXRoIHRoZSBzaGFyZWQgb25lIGV2ZXJ5IG9uY2UgaW4KLSAgICAvLyBhIHdoaWxl
IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBsb2NhbCBzZXRzIGRvbid0IGdyb3cgdG9vIGxhcmdlLgot
ICAgIG1lcmdlT3BhcXVlUm9vdHNJZlByb2ZpdGFibGUoKTsKLSAgICBtX29wYXF1ZVJvb3RzLmFk
ZChyb290KTsKLSNlbHNlCi0gICAgbV9vcGFxdWVSb290cy5hZGQocm9vdCk7Ci0jZW5kaWYKLX0K
LQotaW5saW5lIGJvb2wgU2xvdFZpc2l0b3I6OmNvbnRhaW5zT3BhcXVlUm9vdCh2b2lkKiByb290
KQotewotICAgIEFTU0VSVCghbV9pc0luUGFyYWxsZWxNb2RlKTsKLSNpZiBFTkFCTEUoUEFSQUxM
RUxfR0MpCi0gICAgQVNTRVJUKG1fb3BhcXVlUm9vdHMuaXNFbXB0eSgpKTsKLSAgICByZXR1cm4g
bV9zaGFyZWQubV9vcGFxdWVSb290cy5jb250YWlucyhyb290KTsKLSNlbHNlCi0gICAgcmV0dXJu
IG1fb3BhcXVlUm9vdHMuY29udGFpbnMocm9vdCk7Ci0jZW5kaWYKLX0KLQotaW5saW5lIGludCBT
bG90VmlzaXRvcjo6b3BhcXVlUm9vdENvdW50KCkKLXsKLSAgICBBU1NFUlQoIW1faXNJblBhcmFs
bGVsTW9kZSk7Ci0jaWYgRU5BQkxFKFBBUkFMTEVMX0dDKQotICAgIEFTU0VSVChtX29wYXF1ZVJv
b3RzLmlzRW1wdHkoKSk7Ci0gICAgcmV0dXJuIG1fc2hhcmVkLm1fb3BhcXVlUm9vdHMuc2l6ZSgp
OwotI2Vsc2UKLSAgICByZXR1cm4gbV9vcGFxdWVSb290cy5zaXplKCk7Ci0jZW5kaWYKLX0KLQot
aW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6Om1lcmdlT3BhcXVlUm9vdHNJZk5lY2Vzc2FyeSgpCi17
Ci0gICAgaWYgKG1fb3BhcXVlUm9vdHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0gICAg
bWVyZ2VPcGFxdWVSb290cygpOwotfQotICAgIAotaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6Om1l
cmdlT3BhcXVlUm9vdHNJZlByb2ZpdGFibGUoKQotewotICAgIGlmIChzdGF0aWNfY2FzdDx1bnNp
Z25lZD4obV9vcGFxdWVSb290cy5zaXplKCkpIDwgT3B0aW9uczo6b3BhcXVlUm9vdE1lcmdlVGhy
ZXNob2xkKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtZXJnZU9wYXF1ZVJvb3RzKCk7Ci19Ci0g
ICAgCi1pbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6ZG9uYXRlKCkKLXsKLSAgICBBU1NFUlQobV9p
c0luUGFyYWxsZWxNb2RlKTsKLSAgICBpZiAoT3B0aW9uczo6bnVtYmVyT2ZHQ01hcmtlcnMoKSA9
PSAxKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgZG9uYXRlS25vd25QYXJhbGxlbCgpOwot
fQotCi1pbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6ZG9uYXRlQW5kRHJhaW4oKQotewotICAgIGRv
bmF0ZSgpOwotICAgIGRyYWluKCk7Ci19Ci0KLWlubGluZSB2b2lkIFNsb3RWaXNpdG9yOjpjb3B5
TGF0ZXIodm9pZCogcHRyLCBzaXplX3QgYnl0ZXMpCi17Ci0gICAgaWYgKENvcGllZFNwYWNlOjpp
c092ZXJzaXplKGJ5dGVzKSkgewotICAgICAgICBtX3NoYXJlZC5tX2NvcGllZFNwYWNlLT5waW4o
Q29waWVkU3BhY2U6Om92ZXJzaXplQmxvY2tGb3IocHRyKSk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBDb3BpZWRCbG9jayogYmxvY2sgPSBDb3BpZWRTcGFjZTo6YmxvY2tGb3IocHRy
KTsKLSAgICBpZiAoYmxvY2stPmlzUGlubmVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGJs
b2NrLT5yZXBvcnRMaXZlQnl0ZXMoYnl0ZXMpOwotCi0gICAgaWYgKCFibG9jay0+c2hvdWxkRXZh
Y3VhdGUoKSkKLSAgICAgICAgbV9zaGFyZWQubV9jb3BpZWRTcGFjZS0+cGluKGJsb2NrKTsKLX0K
LSAgICAKLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gU2xvdFZpc2l0b3JJbmxpbmVN
ZXRob2RzX2gKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJ
bmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZp
c2l0b3JJbmxpbmVzLmgJKHJldmlzaW9uIDEzMzM4OSkJKGZyb20gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVNZXRob2RzLmg6MTMzMzg5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNsb3RWaXNpdG9ySW5saW5lTWV0
aG9kc19oCisjZGVmaW5lIFNsb3RWaXNpdG9ySW5saW5lTWV0aG9kc19oCisKKyNpbmNsdWRlICJD
b3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJPcHRpb25zLmgiCisjaW5jbHVk
ZSAiU2xvdFZpc2l0b3IuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK0FMV0FZU19JTkxJTkUgdm9p
ZCBTbG90VmlzaXRvcjo6YXBwZW5kKEpTVmFsdWUqIHNsb3QsIHNpemVfdCBjb3VudCkKK3sKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgSlNWYWx1ZSYg
dmFsdWUgPSBzbG90W2ldOworICAgICAgICBpbnRlcm5hbEFwcGVuZCh2YWx1ZSk7CisgICAgfQor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgoraW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVu
ZFVuYmFycmllcmVkUG9pbnRlcihUKiogc2xvdCkKK3sKKyAgICBBU1NFUlQoc2xvdCk7CisgICAg
SlNDZWxsKiBjZWxsID0gKnNsb3Q7CisgICAgaW50ZXJuYWxBcHBlbmQoY2VsbCk7Cit9CisKK0FM
V0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kKEpTVmFsdWUqIHNsb3QpCit7Cisg
ICAgQVNTRVJUKHNsb3QpOworICAgIGludGVybmFsQXBwZW5kKCpzbG90KTsKK30KKworQUxXQVlT
X0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRVbmJhcnJpZXJlZFZhbHVlKEpTVmFsdWUq
IHNsb3QpCit7CisgICAgQVNTRVJUKHNsb3QpOworICAgIGludGVybmFsQXBwZW5kKCpzbG90KTsK
K30KKworQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmQoSlNDZWxsKiogc2xv
dCkKK3sKKyAgICBBU1NFUlQoc2xvdCk7CisgICAgaW50ZXJuYWxBcHBlbmQoKnNsb3QpOworfQor
CitBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmludGVybmFsQXBwZW5kKEpTVmFsdWUg
dmFsdWUpCit7CisgICAgaWYgKCF2YWx1ZSB8fCAhdmFsdWUuaXNDZWxsKCkpCisgICAgICAgIHJl
dHVybjsKKyAgICBpbnRlcm5hbEFwcGVuZCh2YWx1ZS5hc0NlbGwoKSk7Cit9CisKK2lubGluZSB2
b2lkIFNsb3RWaXNpdG9yOjphZGRXZWFrUmVmZXJlbmNlSGFydmVzdGVyKFdlYWtSZWZlcmVuY2VI
YXJ2ZXN0ZXIqIHdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIpCit7CisgICAgbV9zaGFyZWQubV93ZWFr
UmVmZXJlbmNlSGFydmVzdGVycy5hZGRUaHJlYWRTYWZlKHdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIp
OworfQorCitpbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6YWRkVW5jb25kaXRpb25hbEZpbmFsaXpl
cihVbmNvbmRpdGlvbmFsRmluYWxpemVyKiB1bmNvbmRpdGlvbmFsRmluYWxpemVyKQoreworICAg
IG1fc2hhcmVkLm1fdW5jb25kaXRpb25hbEZpbmFsaXplcnMuYWRkVGhyZWFkU2FmZSh1bmNvbmRp
dGlvbmFsRmluYWxpemVyKTsKK30KKworaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OmFkZE9wYXF1
ZVJvb3Qodm9pZCogcm9vdCkKK3sKKyNpZiBFTkFCTEUoUEFSQUxMRUxfR0MpCisgICAgaWYgKE9w
dGlvbnM6Om51bWJlck9mR0NNYXJrZXJzKCkgPT0gMSkgeworICAgICAgICAvLyBQdXQgZGlyZWN0
bHkgaW50byB0aGUgc2hhcmVkIEhhc2hTZXQuCisgICAgICAgIG1fc2hhcmVkLm1fb3BhcXVlUm9v
dHMuYWRkKHJvb3QpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIC8vIFB1dCBpbnRvIHRo
ZSBsb2NhbCBzZXQsIGJ1dCBtZXJnZSB3aXRoIHRoZSBzaGFyZWQgb25lIGV2ZXJ5IG9uY2UgaW4K
KyAgICAvLyBhIHdoaWxlIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBsb2NhbCBzZXRzIGRvbid0IGdy
b3cgdG9vIGxhcmdlLgorICAgIG1lcmdlT3BhcXVlUm9vdHNJZlByb2ZpdGFibGUoKTsKKyAgICBt
X29wYXF1ZVJvb3RzLmFkZChyb290KTsKKyNlbHNlCisgICAgbV9vcGFxdWVSb290cy5hZGQocm9v
dCk7CisjZW5kaWYKK30KKworaW5saW5lIGJvb2wgU2xvdFZpc2l0b3I6OmNvbnRhaW5zT3BhcXVl
Um9vdCh2b2lkKiByb290KQoreworICAgIEFTU0VSVCghbV9pc0luUGFyYWxsZWxNb2RlKTsKKyNp
ZiBFTkFCTEUoUEFSQUxMRUxfR0MpCisgICAgQVNTRVJUKG1fb3BhcXVlUm9vdHMuaXNFbXB0eSgp
KTsKKyAgICByZXR1cm4gbV9zaGFyZWQubV9vcGFxdWVSb290cy5jb250YWlucyhyb290KTsKKyNl
bHNlCisgICAgcmV0dXJuIG1fb3BhcXVlUm9vdHMuY29udGFpbnMocm9vdCk7CisjZW5kaWYKK30K
KworaW5saW5lIGludCBTbG90VmlzaXRvcjo6b3BhcXVlUm9vdENvdW50KCkKK3sKKyAgICBBU1NF
UlQoIW1faXNJblBhcmFsbGVsTW9kZSk7CisjaWYgRU5BQkxFKFBBUkFMTEVMX0dDKQorICAgIEFT
U0VSVChtX29wYXF1ZVJvb3RzLmlzRW1wdHkoKSk7CisgICAgcmV0dXJuIG1fc2hhcmVkLm1fb3Bh
cXVlUm9vdHMuc2l6ZSgpOworI2Vsc2UKKyAgICByZXR1cm4gbV9vcGFxdWVSb290cy5zaXplKCk7
CisjZW5kaWYKK30KKworaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6Om1lcmdlT3BhcXVlUm9vdHNJ
Zk5lY2Vzc2FyeSgpCit7CisgICAgaWYgKG1fb3BhcXVlUm9vdHMuaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm47CisgICAgbWVyZ2VPcGFxdWVSb290cygpOworfQorICAgIAoraW5saW5lIHZvaWQg
U2xvdFZpc2l0b3I6Om1lcmdlT3BhcXVlUm9vdHNJZlByb2ZpdGFibGUoKQoreworICAgIGlmIChz
dGF0aWNfY2FzdDx1bnNpZ25lZD4obV9vcGFxdWVSb290cy5zaXplKCkpIDwgT3B0aW9uczo6b3Bh
cXVlUm9vdE1lcmdlVGhyZXNob2xkKCkpCisgICAgICAgIHJldHVybjsKKyAgICBtZXJnZU9wYXF1
ZVJvb3RzKCk7Cit9CisgICAgCitpbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6ZG9uYXRlKCkKK3sK
KyAgICBBU1NFUlQobV9pc0luUGFyYWxsZWxNb2RlKTsKKyAgICBpZiAoT3B0aW9uczo6bnVtYmVy
T2ZHQ01hcmtlcnMoKSA9PSAxKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgZG9uYXRlS25v
d25QYXJhbGxlbCgpOworfQorCitpbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6ZG9uYXRlQW5kRHJh
aW4oKQoreworICAgIGRvbmF0ZSgpOworICAgIGRyYWluKCk7Cit9CisKK2lubGluZSB2b2lkIFNs
b3RWaXNpdG9yOjpjb3B5TGF0ZXIodm9pZCogcHRyLCBzaXplX3QgYnl0ZXMpCit7CisgICAgaWYg
KENvcGllZFNwYWNlOjppc092ZXJzaXplKGJ5dGVzKSkgeworICAgICAgICBtX3NoYXJlZC5tX2Nv
cGllZFNwYWNlLT5waW4oQ29waWVkU3BhY2U6Om92ZXJzaXplQmxvY2tGb3IocHRyKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBDb3BpZWRCbG9jayogYmxvY2sgPSBDb3BpZWRTcGFj
ZTo6YmxvY2tGb3IocHRyKTsKKyAgICBpZiAoYmxvY2stPmlzUGlubmVkKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIGJsb2NrLT5yZXBvcnRMaXZlQnl0ZXMoYnl0ZXMpOworCisgICAgaWYgKCFi
bG9jay0+c2hvdWxkRXZhY3VhdGUoKSkKKyAgICAgICAgbV9zaGFyZWQubV9jb3BpZWRTcGFjZS0+
cGluKGJsb2NrKTsKK30KKyAgICAKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gU2xv
dFZpc2l0b3JJbmxpbmVNZXRob2RzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgJKHJldmlzaW9uIDEzMzM4OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yMywxMCArMjMsMTAgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
ICAqLwogCi0jaWZuZGVmIFNsb3RWaXNpdG9ySW5saW5lTWV0aG9kc19oCi0jZGVmaW5lIFNsb3RW
aXNpdG9ySW5saW5lTWV0aG9kc19oCisjaWZuZGVmIFNsb3RWaXNpdG9ySW5saW5lc19oCisjZGVm
aW5lIFNsb3RWaXNpdG9ySW5saW5lc19oCiAKLSNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZU1l
dGhvZHMuaCIKKyNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZXMuaCIKICNpbmNsdWRlICJPcHRp
b25zLmgiCiAjaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKIApAQCAtMTcwLDUgKzE3MCw1IEBAIGlu
bGluZSB2b2lkIFNsb3RWaXNpdG9yOjpjb3B5TGF0ZXIodm9pZCoKICAgICAKIH0gLy8gbmFtZXNw
YWNlIEpTQwogCi0jZW5kaWYgLy8gU2xvdFZpc2l0b3JJbmxpbmVNZXRob2RzX2gKKyNlbmRpZiAv
LyBTbG90VmlzaXRvcklubGluZXNfaAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0hvc3RDYWxsUmV0dXJuVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSG9zdENhbGxSZXR1cm5WYWx1ZS5jcHAJKHJldmlzaW9uIDEzMzk2NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSG9zdENhbGxSZXR1cm5WYWx1ZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRl
IDx3dGYvSW5saW5lQVNNLmg+CiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKLSNpbmNsdWRlICJKU1Zh
bHVlSW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkpTVmFsdWVJbmxpbmVzLmgiCiAKIAogbmFt
ZXNwYWNlIEpTQyB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiAx
MzM5NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM4LDcgKzM4LDcgQEAgSlNDOjpNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6U1NFMkNo
ZWNrUwogI2luY2x1ZGUgPHd0Zi9DcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlci5oPgogI2lu
Y2x1ZGUgIkRGR05vZGUuaCIgLy8gZm9yIERGR19TVUNDRVNTX1NUQVRTCiAjaW5jbHVkZSAiSW50
ZXJwcmV0ZXIuaCIKLSNpbmNsdWRlICJKSVRJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiSklU
SW5saW5lcy5oIgogI2luY2x1ZGUgIkpJVFN0dWJDYWxsLmgiCiAjaW5jbHVkZSAiSlNBcnJheS5o
IgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUQXJpdGhtZXRpYzMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVEFyaXRobWV0aWMzMl82NC5jcHAJKHJldmlzaW9uIDEzMzk2NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYzMyXzY0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzAsNyArMzAsNyBAQAogI2luY2x1ZGUgIkpJVC5oIgogCiAjaW5jbHVkZSAiQ29k
ZUJsb2NrLmgiCi0jaW5jbHVkZSAiSklUSW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkpJVElu
bGluZXMuaCIKICNpbmNsdWRlICJKSVRTdHViQ2FsbC5oIgogI2luY2x1ZGUgIkpJVFN0dWJzLmgi
CiAjaW5jbHVkZSAiSlNBcnJheS5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRBcml0aG1ldGljLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVEFyaXRobWV0aWMuY3BwCShyZXZpc2lvbiAxMzM5NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3
IEBACiAjaW5jbHVkZSAiSklULmgiCiAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKLSNpbmNsdWRl
ICJKSVRJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiSklUSW5saW5lcy5oIgogI2luY2x1ZGUg
IkpJVFN0dWJDYWxsLmgiCiAjaW5jbHVkZSAiSklUU3R1YnMuaCIKICNpbmNsdWRlICJKU0FycmF5
LmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCShy
ZXZpc2lvbiAxMzM5NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82
NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlICJBcmd1bWVu
dHMuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgot
I2luY2x1ZGUgIkpJVElubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiSklUU3R1YkNhbGwuaCIKICNpbmNsdWRlICJKU0FycmF5LmgiCiAjaW5jbHVkZSAi
SlNGdW5jdGlvbi5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCShy
ZXZpc2lvbiAxMzM5NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAKICNpbmNsdWRlICJBcmd1bWVudHMu
aCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKLSNpbmNsdWRlICJKSVRJbmxpbmVNZXRob2RzLmgi
CisjaW5jbHVkZSAiSklUSW5saW5lcy5oIgogI2luY2x1ZGUgIkpJVFN0dWJDYWxsLmgiCiAjaW5j
bHVkZSAiSlNBcnJheS5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAxMzM5NjUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZU1ldGhvZHMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSwxMDA3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIw
MTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBKSVRJbmxpbmVNZXRob2RzX2gKLSNkZWZp
bmUgSklUSW5saW5lTWV0aG9kc19oCi0KLQotI2lmIEVOQUJMRShKSVQpCi0KLW5hbWVzcGFjZSBK
U0MgewotCi1BTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudEltbWVkaWF0
ZURvdWJsZSh1bnNpZ25lZCBzcmMpCi17Ci0gICAgcmV0dXJuIG1fY29kZUJsb2NrLT5pc0NvbnN0
YW50UmVnaXN0ZXJJbmRleChzcmMpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzRG91Ymxl
KCk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgSlNWYWx1ZSBKSVQ6OmdldENvbnN0YW50T3BlcmFuZCh1
bnNpZ25lZCBzcmMpCi17Ci0gICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0
ZXJJbmRleChzcmMpKTsKLSAgICByZXR1cm4gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7
Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRDZWxsVG9DYWxsRnJhbWVIZWFk
ZXIoUmVnaXN0ZXJJRCBmcm9tLCBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJFbnRyeSBlbnRyeSkK
LXsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OkNlbGxUYWcpLCB0YWdGb3IoZW50cnksIGNhbGxGcmFtZVJlZ2lzdGVyKSk7Ci0gICAgc3Rv
cmUzMihmcm9tLCBwYXlsb2FkRm9yKGVudHJ5LCBjYWxsRnJhbWVSZWdpc3RlcikpOwotI2Vsc2UK
LSAgICBzdG9yZTY0KGZyb20sIGFkZHJlc3NGb3IoZW50cnksIGNhbGxGcmFtZVJlZ2lzdGVyKSk7
Ci0jZW5kaWYKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dEludFRvQ2FsbEZy
YW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyRW50cnkg
ZW50cnkpCi17Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICBzdG9yZTMyKFRydXN0ZWRJbW0z
MihJbnQzMlRhZyksIGludFRhZ0ZvcihlbnRyeSwgY2FsbEZyYW1lUmVnaXN0ZXIpKTsKLSAgICBz
dG9yZTMyKGZyb20sIGludFBheWxvYWRGb3IoZW50cnksIGNhbGxGcmFtZVJlZ2lzdGVyKSk7Ci0j
ZWxzZQotICAgIHN0b3JlNjQoZnJvbSwgYWRkcmVzc0ZvcihlbnRyeSwgY2FsbEZyYW1lUmVnaXN0
ZXIpKTsKLSNlbmRpZgotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0VG9DYWxs
RnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJFbnRy
eSBlbnRyeSkKLXsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIHN0b3JlUHRyKGZyb20sIHBh
eWxvYWRGb3IoZW50cnksIGNhbGxGcmFtZVJlZ2lzdGVyKSk7Ci0jZWxzZQotICAgIHN0b3JlNjQo
ZnJvbSwgYWRkcmVzc0ZvcihlbnRyeSwgY2FsbEZyYW1lUmVnaXN0ZXIpKTsKLSNlbmRpZgotfQot
Ci1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0SW1tZWRpYXRlVG9DYWxsRnJhbWVIZWFk
ZXIodm9pZCogdmFsdWUsIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlckVudHJ5IGVudHJ5KQotewot
ICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIodmFsdWUpLCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lz
dGVyLCBlbnRyeSAqIHNpemVvZihSZWdpc3RlcikpKTsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6ZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoSlNTdGFjazo6Q2FsbEZyYW1lSGVh
ZGVyRW50cnkgZW50cnksIFJlZ2lzdGVySUQgdG8sIFJlZ2lzdGVySUQgZnJvbSkKLXsKLSAgICBs
b2FkUHRyKEFkZHJlc3MoZnJvbSwgZW50cnkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgdG8pOwotI2lm
IFVTRShKU1ZBTFVFNjQpCi0gICAga2lsbExhc3RSZXN1bHRSZWdpc3RlcigpOwotI2VuZGlmCi19
Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyMzIo
SlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyRW50cnkgZW50cnksIFJlZ2lzdGVySUQgdG8sIFJlZ2lz
dGVySUQgZnJvbSkKLXsKLSAgICBsb2FkMzIoQWRkcmVzcyhmcm9tLCBlbnRyeSAqIHNpemVvZihS
ZWdpc3RlcikpLCB0byk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBraWxsTGFzdFJlc3VsdFJl
Z2lzdGVyKCk7Ci0jZW5kaWYKLX0KLQotI2lmIFVTRShKU1ZBTFVFNjQpCi1BTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjplbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlcjY0KEpTU3RhY2s6OkNhbGxGcmFt
ZUhlYWRlckVudHJ5IGVudHJ5LCBSZWdpc3RlcklEIHRvLCBSZWdpc3RlcklEIGZyb20pCi17Ci0g
ICAgbG9hZDY0KEFkZHJlc3MoZnJvbSwgZW50cnkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgdG8pOwot
ICAgIGtpbGxMYXN0UmVzdWx0UmVnaXN0ZXIoKTsKLX0KLSNlbmRpZgotCi1BTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjplbWl0TG9hZENoYXJhY3RlclN0cmluZyhSZWdpc3RlcklEIHNyYywgUmVnaXN0
ZXJJRCBkc3QsIEp1bXBMaXN0JiBmYWlsdXJlcykKLXsKLSAgICBmYWlsdXJlcy5hcHBlbmQoYnJh
bmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHNyYywgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSks
IFRydXN0ZWRJbW1QdHIobV9nbG9iYWxEYXRhLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7Ci0g
ICAgZmFpbHVyZXMuYXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhzcmMsIFRodW5rSGVscGVyczo6anNTdHJpbmdMZW5ndGhPZmZzZXQoKSksIFRydXN0ZWRJ
bW0zMigxKSkpOwotICAgIGxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3JjLCBUaHVu
a0hlbHBlcnM6OmpzU3RyaW5nVmFsdWVPZmZzZXQoKSksIGRzdCk7Ci0gICAgZmFpbHVyZXMuYXBw
ZW5kKGJyYW5jaFRlc3QzMihaZXJvLCBkc3QpKTsKLSAgICBsb2FkUHRyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGRzdCwgVGh1bmtIZWxwZXJzOjpzdHJpbmdJbXBsRmxhZ3NPZmZzZXQoKSksIHJl
Z1QxKTsKLSAgICBsb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGRzdCwgVGh1bmtIZWxw
ZXJzOjpzdHJpbmdJbXBsRGF0YU9mZnNldCgpKSwgZHN0KTsKLQotICAgIEp1bXBMaXN0IGlzMTZC
aXQ7Ci0gICAgSnVtcExpc3QgY29udDhCaXQ7Ci0gICAgaXMxNkJpdC5hcHBlbmQoYnJhbmNoVGVz
dDMyKFplcm8sIHJlZ1QxLCBUcnVzdGVkSW1tMzIoVGh1bmtIZWxwZXJzOjpzdHJpbmdJbXBsOEJp
dEZsYWcoKSkpKTsKLSAgICBsb2FkOChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhkc3QsIDApLCBk
c3QpOwotICAgIGNvbnQ4Qml0LmFwcGVuZChqdW1wKCkpOwotICAgIGlzMTZCaXQubGluayh0aGlz
KTsKLSAgICBsb2FkMTYoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZHN0LCAwKSwgZHN0KTsKLSAg
ICBjb250OEJpdC5saW5rKHRoaXMpOwotfQotCi1BTFdBWVNfSU5MSU5FIEpJVDo6Q2FsbCBKSVQ6
OmVtaXROYWtlZENhbGwoQ29kZVB0ciBmdW5jdGlvbikKLXsKLSAgICBBU1NFUlQobV9ieXRlY29k
ZU9mZnNldCAhPSAodW5zaWduZWQpLTEpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBj
YWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2Rl
T2Zmc2V0IGlzIHNldC4KLQotICAgIENhbGwgbmFrZWRDYWxsID0gbmVhckNhbGwoKTsKLSAgICBt
X2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKG5ha2VkQ2FsbCwgbV9ieXRlY29kZU9mZnNldCwgZnVu
Y3Rpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwotICAgIHJldHVybiBuYWtlZENhbGw7Ci19Ci0K
LUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmF0SnVtcFRhcmdldCgpCi17Ci0gICAgd2hpbGUgKG1f
anVtcFRhcmdldHNQb3NpdGlvbiA8IG1fY29kZUJsb2NrLT5udW1iZXJPZkp1bXBUYXJnZXRzKCkg
JiYgbV9jb2RlQmxvY2stPmp1bXBUYXJnZXQobV9qdW1wVGFyZ2V0c1Bvc2l0aW9uKSA8PSBtX2J5
dGVjb2RlT2Zmc2V0KSB7Ci0gICAgICAgIGlmIChtX2NvZGVCbG9jay0+anVtcFRhcmdldChtX2p1
bXBUYXJnZXRzUG9zaXRpb24pID09IG1fYnl0ZWNvZGVPZmZzZXQpCi0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgKyttX2p1bXBUYXJnZXRzUG9zaXRpb247Ci0gICAgfQotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQotI2lmIGRlZmluZWQoQVNTRU1CTEVSX0hBU19DT05TVEFOVF9QT09M
KSAmJiBBU1NFTUJMRVJfSEFTX0NPTlNUQU5UX1BPT0wKLQotQUxXQVlTX0lOTElORSB2b2lkIEpJ
VDo6YmVnaW5VbmludGVycnVwdGVkU2VxdWVuY2UoaW50IGluc25TcGFjZSwgaW50IGNvbnN0U3Bh
Y2UpCi17Ci0jaWYgQ1BVKEFSTV9UUkFESVRJT05BTCkKLSNpZm5kZWYgTkRFQlVHCi0gICAgLy8g
RW5zdXJlIHRoZSBsYWJlbCBhZnRlciB0aGUgc2VxdWVuY2UgY2FuIGFsc28gZml0Ci0gICAgaW5z
blNwYWNlICs9IHNpemVvZihBUk1Xb3JkKTsKLSAgICBjb25zdFNwYWNlICs9IHNpemVvZih1aW50
NjRfdCk7Ci0jZW5kaWYKLQotICAgIGVuc3VyZVNwYWNlKGluc25TcGFjZSwgY29uc3RTcGFjZSk7
Ci0KLSNlbGlmIENQVShTSDQpCi0jaWZuZGVmIE5ERUJVRwotICAgIGluc25TcGFjZSArPSBzaXpl
b2YoU0g0V29yZCk7Ci0gICAgY29uc3RTcGFjZSArPSBzaXplb2YodWludDY0X3QpOwotI2VuZGlm
Ci0KLSAgICBtX2Fzc2VtYmxlci5lbnN1cmVTcGFjZShpbnNuU3BhY2UgKyBtX2Fzc2VtYmxlci5t
YXhJbnN0cnVjdGlvblNpemUgKyAyLCBjb25zdFNwYWNlICsgOCk7Ci0jZW5kaWYKLQotI2lmIGRl
ZmluZWQoQVNTRU1CTEVSX0hBU19DT05TVEFOVF9QT09MKSAmJiBBU1NFTUJMRVJfSEFTX0NPTlNU
QU5UX1BPT0wKLSNpZm5kZWYgTkRFQlVHCi0gICAgbV91bmludGVycnVwdGVkSW5zdHJ1Y3Rpb25T
ZXF1ZW5jZUJlZ2luID0gbGFiZWwoKTsKLSAgICBtX3VuaW50ZXJydXB0ZWRDb25zdGFudFNlcXVl
bmNlQmVnaW4gPSBzaXplT2ZDb25zdGFudFBvb2woKTsKLSNlbmRpZgotI2VuZGlmCi19Ci0KLUFM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVuZFVuaW50ZXJydXB0ZWRTZXF1ZW5jZShpbnQgaW5zblNw
YWNlLCBpbnQgY29uc3RTcGFjZSwgaW50IGRzdCkKLXsKLSAgICBVTlVTRURfUEFSQU0oZHN0KTsK
LSNpZiBkZWZpbmVkKEFTU0VNQkxFUl9IQVNfQ09OU1RBTlRfUE9PTCkgJiYgQVNTRU1CTEVSX0hB
U19DT05TVEFOVF9QT09MCi0gICAgLyogVGhlcmUgYXJlIHNldmVyYWwgY2FzZXMgd2hlbiB0aGUg
dW5pbnRlcnJ1cHRlZCBzZXF1ZW5jZSBpcyBsYXJnZXIgdGhhbgotICAgICAqIG1heGltdW0gcmVx
dWlyZWQgb2Zmc2V0IGZvciBwYXRoaW5nIHRoZSBzYW1lIHNlcXVlbmNlLiBFZy46IGlmIGluIGEK
LSAgICAgKiB1bmludGVycnVwdGVkIHNlcXVlbmNlIHRoZSBsYXN0IG1hY3JvYXNzZW1ibGVyJ3Mg
aW5zdHJ1Y3Rpb24gaXMgYSBzdHViCi0gICAgICogY2FsbCwgaXQgZW1pdHMgc3RvcmUgaW5zdHJ1
Y3Rpb24ocykgd2hpY2ggc2hvdWxkIG5vdCBiZSBpbmNsdWRlZCBpbiB0aGUKLSAgICAgKiBjYWxj
dWxhdGlvbiBvZiBsZW5ndGggb2YgdW5pbnRlcnJ1cHRlZCBzZXF1ZW5jZS4gU28sIHRoZSBpbnNu
U3BhY2UgYW5kCi0gICAgICogY29uc3RTcGFjZSBzaG91bGQgYmUgdXBwZXIgbGltaXQgaW5zdGVh
ZCBvZiBoYXJkIGxpbWl0LgotICAgICAqLwotI2lmIENQVShTSDQpCi0gICAgaWYgKChkc3QgPiAx
NSkgfHwgKGRzdCA8IC0xNikpIHsKLSAgICAgICAgaW5zblNwYWNlICs9IDg7Ci0gICAgICAgIGNv
bnN0U3BhY2UgKz0gMjsKLSAgICB9Ci0KLSAgICBpZiAoKChkc3QgPj0gLTE2KSAmJiAoZHN0IDwg
MCkpIHx8ICgoZHN0ID4gNykgJiYgKGRzdCA8PSAxNSkpKQotICAgICAgICBpbnNuU3BhY2UgKz0g
ODsKLSNlbmRpZgotICAgIEFTU0VSVChkaWZmZXJlbmNlQmV0d2VlbihtX3VuaW50ZXJydXB0ZWRJ
bnN0cnVjdGlvblNlcXVlbmNlQmVnaW4sIGxhYmVsKCkpIDw9IGluc25TcGFjZSk7Ci0gICAgQVNT
RVJUKHNpemVPZkNvbnN0YW50UG9vbCgpIC0gbV91bmludGVycnVwdGVkQ29uc3RhbnRTZXF1ZW5j
ZUJlZ2luIDw9IGNvbnN0U3BhY2UpOwotI2VuZGlmCi19Ci0KLSNlbmRpZgotCi0jaWYgQ1BVKEFS
TSkKLQotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6cHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJD
YWxsKFJlZ2lzdGVySUQgcmVnKQotewotICAgIG1vdmUobGlua1JlZ2lzdGVyLCByZWcpOwotfQot
Ci1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpyZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVy
bihSZWdpc3RlcklEIHJlZykKLXsKLSAgICBtb3ZlKHJlZywgbGlua1JlZ2lzdGVyKTsKLX0KLQot
QUxXQVlTX0lOTElORSB2b2lkIEpJVDo6cmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4o
QWRkcmVzcyBhZGRyZXNzKQotewotICAgIGxvYWRQdHIoYWRkcmVzcywgbGlua1JlZ2lzdGVyKTsK
LX0KLSNlbGlmIENQVShTSDQpCi0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnByZXNlcnZlUmV0
dXJuQWRkcmVzc0FmdGVyQ2FsbChSZWdpc3RlcklEIHJlZykKLXsKLSAgICBtX2Fzc2VtYmxlci5z
dHNwcihyZWcpOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpyZXN0b3JlUmV0dXJuQWRk
cmVzc0JlZm9yZVJldHVybihSZWdpc3RlcklEIHJlZykKLXsKLSAgICBtX2Fzc2VtYmxlci5sZHNw
cihyZWcpOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpyZXN0b3JlUmV0dXJuQWRkcmVz
c0JlZm9yZVJldHVybihBZGRyZXNzIGFkZHJlc3MpCi17Ci0gICAgbG9hZFB0ckxpbmtSZWcoYWRk
cmVzcyk7Ci19Ci0KLSNlbGlmIENQVShNSVBTKQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpw
cmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwoUmVnaXN0ZXJJRCByZWcpCi17Ci0gICAgbW92
ZShyZXR1cm5BZGRyZXNzUmVnaXN0ZXIsIHJlZyk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6OnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKFJlZ2lzdGVySUQgcmVnKQotewot
ICAgIG1vdmUocmVnLCByZXR1cm5BZGRyZXNzUmVnaXN0ZXIpOwotfQotCi1BTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjpyZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihBZGRyZXNzIGFkZHJl
c3MpCi17Ci0gICAgbG9hZFB0cihhZGRyZXNzLCByZXR1cm5BZGRyZXNzUmVnaXN0ZXIpOwotfQot
Ci0jZWxzZSAvLyBDUFUoWDg2KSB8fCBDUFUoWDg2XzY0KQotCi1BTFdBWVNfSU5MSU5FIHZvaWQg
SklUOjpwcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwoUmVnaXN0ZXJJRCByZWcpCi17Ci0g
ICAgcG9wKHJlZyk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnJlc3RvcmVSZXR1cm5B
ZGRyZXNzQmVmb3JlUmV0dXJuKFJlZ2lzdGVySUQgcmVnKQotewotICAgIHB1c2gocmVnKTsKLX0K
LQotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6cmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1
cm4oQWRkcmVzcyBhZGRyZXNzKQotewotICAgIHB1c2goYWRkcmVzcyk7Ci19Ci0KLSNlbmRpZgot
Ci1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpyZXN0b3JlQXJndW1lbnRSZWZlcmVuY2UoKQotewot
ICAgIG1vdmUoc3RhY2tQb2ludGVyUmVnaXN0ZXIsIGZpcnN0QXJndW1lbnRSZWdpc3Rlcik7Ci0g
ICAgcG9rZShjYWxsRnJhbWVSZWdpc3RlciwgT0JKRUNUX09GRlNFVE9GKHN0cnVjdCBKSVRTdGFj
a0ZyYW1lLCBjYWxsRnJhbWUpIC8gc2l6ZW9mKHZvaWQqKSk7Ci19Ci0KLUFMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OnVwZGF0ZVRvcENhbGxGcmFtZSgpCi17Ci0gICAgQVNTRVJUKHN0YXRpY19jYXN0
PGludD4obV9ieXRlY29kZU9mZnNldCkgPj0gMCk7Ci0gICAgaWYgKG1fYnl0ZWNvZGVPZmZzZXQp
IHsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpICsgbV9ieXRlY29kZU9mZnNldCAr
IDEpLCBpbnRUYWdGb3IoSlNTdGFjazo6QXJndW1lbnRDb3VudCkpOwotI2Vsc2UKLSAgICAgICAg
c3RvcmUzMihUcnVzdGVkSW1tMzIobV9ieXRlY29kZU9mZnNldCArIDEpLCBpbnRUYWdGb3IoSlNT
dGFjazo6QXJndW1lbnRDb3VudCkpOwotI2VuZGlmCi0gICAgfQotICAgIHN0b3JlUHRyKGNhbGxG
cmFtZVJlZ2lzdGVyLCAmbV9nbG9iYWxEYXRhLT50b3BDYWxsRnJhbWUpOwotfQotCi1BTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjpyZXN0b3JlQXJndW1lbnRSZWZlcmVuY2VGb3JUcmFtcG9saW5lKCkK
LXsKLSNpZiBDUFUoWDg2KQotICAgIC8vIFdpdGhpbiBhIHRyYW1wb2xpbmUgdGhlIHJldHVybiBh
ZGRyZXNzIHdpbGwgYmUgb24gdGhlIHN0YWNrIGF0IHRoaXMgcG9pbnQuCi0gICAgYWRkUHRyKFRy
dXN0ZWRJbW0zMihzaXplb2Yodm9pZCopKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIsIGZpcnN0QXJn
dW1lbnRSZWdpc3Rlcik7Ci0jZWxpZiBDUFUoQVJNKQotICAgIG1vdmUoc3RhY2tQb2ludGVyUmVn
aXN0ZXIsIGZpcnN0QXJndW1lbnRSZWdpc3Rlcik7Ci0jZWxpZiBDUFUoU0g0KQotICAgIG1vdmUo
c3RhY2tQb2ludGVyUmVnaXN0ZXIsIGZpcnN0QXJndW1lbnRSZWdpc3Rlcik7Ci0jZW5kaWYKLSAg
ICAvLyBJbiB0aGUgdHJhbXBvbGluZSBvbiB4ODYtNjQsIHRoZSBmaXJzdCBhcmd1bWVudCByZWdp
c3RlciBpcyBub3Qgb3ZlcndyaXR0ZW4uCi19Ci0KLUFMV0FZU19JTkxJTkUgSklUOjpKdW1wIEpJ
VDo6Y2hlY2tTdHJ1Y3R1cmUoUmVnaXN0ZXJJRCByZWcsIFN0cnVjdHVyZSogc3RydWN0dXJlKQot
ewotICAgIHJldHVybiBicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVnLCBKU0NlbGw6OnN0
cnVjdHVyZU9mZnNldCgpKSwgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpKTsKLX0KLQotQUxXQVlT
X0lOTElORSB2b2lkIEpJVDo6bGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlciwgaW50IHZSZWcpCi17Ci0gICAgaWYgKCFtX2NvZGVCbG9j
ay0+aXNLbm93bk5vdEltbWVkaWF0ZSh2UmVnKSkKLSAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIp
OwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZShKdW1wIGp1bXApCi17
Ci0gICAgQVNTRVJUKG1fYnl0ZWNvZGVPZmZzZXQgIT0gKHVuc2lnbmVkKS0xKTsgLy8gVGhpcyBt
ZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRp
b24sIHNvIHRoYXQgbV9ieXRlY29kZU9mZnNldCBpcyBzZXQuCi0KLSAgICBtX3Nsb3dDYXNlcy5h
cHBlbmQoU2xvd0Nhc2VFbnRyeShqdW1wLCBtX2J5dGVjb2RlT2Zmc2V0KSk7Ci19Ci0KLUFMV0FZ
U19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNsb3dDYXNlKEp1bXBMaXN0IGp1bXBMaXN0KQotewotICAg
IEFTU0VSVChtX2J5dGVjb2RlT2Zmc2V0ICE9ICh1bnNpZ25lZCktMSk7IC8vIFRoaXMgbWV0aG9k
IHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBz
byB0aGF0IG1fYnl0ZWNvZGVPZmZzZXQgaXMgc2V0LgotCi0gICAgY29uc3QgSnVtcExpc3Q6Okp1
bXBWZWN0b3ImIGp1bXBWZWN0b3IgPSBqdW1wTGlzdC5qdW1wcygpOwotICAgIHNpemVfdCBzaXpl
ID0ganVtcFZlY3Rvci5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyAr
K2kpCi0gICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KGp1bXBWZWN0b3Jb
aV0sIG1fYnl0ZWNvZGVPZmZzZXQpKTsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRk
U2xvd0Nhc2UoKQotewotICAgIEFTU0VSVChtX2J5dGVjb2RlT2Zmc2V0ICE9ICh1bnNpZ25lZCkt
MSk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQg
cGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVPZmZzZXQgaXMgc2V0LgotICAgIAot
ICAgIEp1bXAgZW1wdHlKdW1wOyAvLyBEb2luZyBpdCB0aGlzIHdheSB0byBtYWtlIFdpbmRvd3Mg
aGFwcHkuCi0gICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoZW1wdHlKdW1wLCBt
X2J5dGVjb2RlT2Zmc2V0KSk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZEp1bXAo
SnVtcCBqdW1wLCBpbnQgcmVsYXRpdmVPZmZzZXQpCi17Ci0gICAgQVNTRVJUKG1fYnl0ZWNvZGVP
ZmZzZXQgIT0gKHVuc2lnbmVkKS0xKTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2Fs
bGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZU9m
ZnNldCBpcyBzZXQuCi0KLSAgICBtX2ptcFRhYmxlLmFwcGVuZChKdW1wVGFibGUoanVtcCwgbV9i
eXRlY29kZU9mZnNldCArIHJlbGF0aXZlT2Zmc2V0KSk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9p
ZCBKSVQ6OmVtaXRKdW1wU2xvd1RvSG90KEp1bXAganVtcCwgaW50IHJlbGF0aXZlT2Zmc2V0KQot
ewotICAgIEFTU0VSVChtX2J5dGVjb2RlT2Zmc2V0ICE9ICh1bnNpZ25lZCktMSk7IC8vIFRoaXMg
bWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0
aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVPZmZzZXQgaXMgc2V0LgotCi0gICAganVtcC5saW5rVG8o
bV9sYWJlbHNbbV9ieXRlY29kZU9mZnNldCArIHJlbGF0aXZlT2Zmc2V0XSwgdGhpcyk7Ci19Ci0K
LUFMV0FZU19JTkxJTkUgSklUOjpKdW1wIEpJVDo6ZW1pdEp1bXBJZk5vdE9iamVjdChSZWdpc3Rl
cklEIHN0cnVjdHVyZVJlZykKLXsKLSAgICByZXR1cm4gYnJhbmNoOChCZWxvdywgQWRkcmVzcyhz
dHJ1Y3R1cmVSZWcsIFN0cnVjdHVyZTo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1t
MzIoT2JqZWN0VHlwZSkpOwotfQotCi1BTFdBWVNfSU5MSU5FIEpJVDo6SnVtcCBKSVQ6OmVtaXRK
dW1wSWZOb3RUeXBlKFJlZ2lzdGVySUQgYmFzZVJlZywgUmVnaXN0ZXJJRCBzY3JhdGNoUmVnLCBK
U1R5cGUgdHlwZSkKLXsKLSAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZVJlZywgSlNDZWxsOjpzdHJ1
Y3R1cmVPZmZzZXQoKSksIHNjcmF0Y2hSZWcpOwotICAgIHJldHVybiBicmFuY2g4KE5vdEVxdWFs
LCBBZGRyZXNzKHNjcmF0Y2hSZWcsIFN0cnVjdHVyZTo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBU
cnVzdGVkSW1tMzIodHlwZSkpOwotfQotCi0jaWYgRU5BQkxFKFNBTVBMSU5HX0ZMQUdTKQotQUxX
QVlTX0lOTElORSB2b2lkIEpJVDo6c2V0U2FtcGxpbmdGbGFnKGludDMyX3QgZmxhZykKLXsKLSAg
ICBBU1NFUlQoZmxhZyA+PSAxKTsKLSAgICBBU1NFUlQoZmxhZyA8PSAzMik7Ci0gICAgb3IzMihU
cnVzdGVkSW1tMzIoMXUgPDwgKGZsYWcgLSAxKSksIEFic29sdXRlQWRkcmVzcyhTYW1wbGluZ0Zs
YWdzOjphZGRyZXNzT2ZGbGFncygpKSk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmNs
ZWFyU2FtcGxpbmdGbGFnKGludDMyX3QgZmxhZykKLXsKLSAgICBBU1NFUlQoZmxhZyA+PSAxKTsK
LSAgICBBU1NFUlQoZmxhZyA8PSAzMik7Ci0gICAgYW5kMzIoVHJ1c3RlZEltbTMyKH4oMXUgPDwg
KGZsYWcgLSAxKSkpLCBBYnNvbHV0ZUFkZHJlc3MoU2FtcGxpbmdGbGFnczo6YWRkcmVzc09mRmxh
Z3MoKSkpOwotfQotI2VuZGlmCi0KLSNpZiBFTkFCTEUoU0FNUExJTkdfQ09VTlRFUlMpCi1BTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjplbWl0Q291bnQoQWJzdHJhY3RTYW1wbGluZ0NvdW50ZXImIGNv
dW50ZXIsIGludDMyX3QgY291bnQpCi17Ci0gICAgYWRkNjQoVHJ1c3RlZEltbTMyKGNvdW50KSwg
QWJzb2x1dGVBZGRyZXNzKGNvdW50ZXIuYWRkcmVzc09mQ291bnRlcigpKSk7Ci19Ci0jZW5kaWYK
LQotI2lmIEVOQUJMRShPUENPREVfU0FNUExJTkcpCi0jaWYgQ1BVKFg4Nl82NCkKLUFMV0FZU19J
TkxJTkUgdm9pZCBKSVQ6OnNhbXBsZUluc3RydWN0aW9uKEluc3RydWN0aW9uKiBpbnN0cnVjdGlv
biwgYm9vbCBpbkhvc3RGdW5jdGlvbikKLXsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9pbnRl
cnByZXRlci0+c2FtcGxlcigpLT5zYW1wbGVTbG90KCkpLCBYODZSZWdpc3RlcnM6OmVjeCk7Ci0g
ICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihtX2ludGVycHJldGVyLT5zYW1wbGVyKCktPmVuY29k
ZVNhbXBsZShpbnN0cnVjdGlvbiwgaW5Ib3N0RnVuY3Rpb24pKSwgWDg2UmVnaXN0ZXJzOjplY3gp
OwotfQotI2Vsc2UKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnNhbXBsZUluc3RydWN0aW9uKElu
c3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgYm9vbCBpbkhvc3RGdW5jdGlvbikKLXsKLSAgICBzdG9y
ZVB0cihUcnVzdGVkSW1tUHRyKG1faW50ZXJwcmV0ZXItPnNhbXBsZXIoKS0+ZW5jb2RlU2FtcGxl
KGluc3RydWN0aW9uLCBpbkhvc3RGdW5jdGlvbikpLCBtX2ludGVycHJldGVyLT5zYW1wbGVyKCkt
PnNhbXBsZVNsb3QoKSk7Ci19Ci0jZW5kaWYKLSNlbmRpZgotCi0jaWYgRU5BQkxFKENPREVCTE9D
S19TQU1QTElORykKLSNpZiBDUFUoWDg2XzY0KQotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6c2Ft
cGxlQ29kZUJsb2NrKENvZGVCbG9jayogY29kZUJsb2NrKQotewotICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihtX2ludGVycHJldGVyLT5zYW1wbGVyKCktPmNvZGVCbG9ja1Nsb3QoKSksIFg4NlJlZ2lz
dGVyczo6ZWN4KTsKLSAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKGNvZGVCbG9jayksIFg4NlJl
Z2lzdGVyczo6ZWN4KTsKLX0KLSNlbHNlCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpzYW1wbGVD
b2RlQmxvY2soQ29kZUJsb2NrKiBjb2RlQmxvY2spCi17Ci0gICAgc3RvcmVQdHIoVHJ1c3RlZElt
bVB0cihjb2RlQmxvY2spLCBtX2ludGVycHJldGVyLT5zYW1wbGVyKCktPmNvZGVCbG9ja1Nsb3Qo
KSk7Ci19Ci0jZW5kaWYKLSNlbmRpZgotCi1BTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJh
bmRDb25zdGFudEltbWVkaWF0ZUNoYXIodW5zaWduZWQgc3JjKQotewotICAgIHJldHVybiBtX2Nv
ZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoc3JjKSAmJiBnZXRDb25zdGFudE9wZXJh
bmQoc3JjKS5pc1N0cmluZygpICYmIGFzU3RyaW5nKGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFz
Q2VsbCgpKS0+bGVuZ3RoKCkgPT0gMTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIENsYXNzVHlw
ZSwgTWFya2VkQmxvY2s6OkRlc3RydWN0b3JUeXBlIGRlc3RydWN0b3JUeXBlLCB0eXBlbmFtZSBT
dHJ1Y3R1cmVUeXBlPiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBbGxvY2F0ZUJhc2ljSlNPYmplY3Qo
U3RydWN0dXJlVHlwZSBzdHJ1Y3R1cmUsIFJlZ2lzdGVySUQgcmVzdWx0LCBSZWdpc3RlcklEIHN0
b3JhZ2VQdHIpCi17Ci0gICAgc2l6ZV90IHNpemUgPSBDbGFzc1R5cGU6OmFsbG9jYXRpb25TaXpl
KElOTElORV9TVE9SQUdFX0NBUEFDSVRZKTsKLSAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRv
ciA9IDA7Ci0gICAgaWYgKGRlc3RydWN0b3JUeXBlID09IE1hcmtlZEJsb2NrOjpOb3JtYWwpCi0g
ICAgICAgIGFsbG9jYXRvciA9ICZtX2dsb2JhbERhdGEtPmhlYXAuYWxsb2NhdG9yRm9yT2JqZWN0
V2l0aE5vcm1hbERlc3RydWN0b3Ioc2l6ZSk7Ci0gICAgZWxzZSBpZiAoZGVzdHJ1Y3RvclR5cGUg
PT0gTWFya2VkQmxvY2s6OkltbW9ydGFsU3RydWN0dXJlKQotICAgICAgICBhbGxvY2F0b3IgPSAm
bV9nbG9iYWxEYXRhLT5oZWFwLmFsbG9jYXRvckZvck9iamVjdFdpdGhJbW1vcnRhbFN0cnVjdHVy
ZURlc3RydWN0b3Ioc2l6ZSk7Ci0gICAgZWxzZQotICAgICAgICBhbGxvY2F0b3IgPSAmbV9nbG9i
YWxEYXRhLT5oZWFwLmFsbG9jYXRvckZvck9iamVjdFdpdGhvdXREZXN0cnVjdG9yKHNpemUpOwot
ICAgIGxvYWRQdHIoJmFsbG9jYXRvci0+bV9mcmVlTGlzdC5oZWFkLCByZXN1bHQpOwotICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgcmVzdWx0KSk7Ci0KLSAgICAvLyByZW1vdmUg
dGhlIG9iamVjdCBmcm9tIHRoZSBmcmVlIGxpc3QKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0
KSwgc3RvcmFnZVB0cik7Ci0gICAgc3RvcmVQdHIoc3RvcmFnZVB0ciwgJmFsbG9jYXRvci0+bV9m
cmVlTGlzdC5oZWFkKTsKLQotICAgIC8vIGluaXRpYWxpemUgdGhlIG9iamVjdCdzIHN0cnVjdHVy
ZQotICAgIHN0b3JlUHRyKHN0cnVjdHVyZSwgQWRkcmVzcyhyZXN1bHQsIEpTQ2VsbDo6c3RydWN0
dXJlT2Zmc2V0KCkpKTsKLQotICAgIC8vIGluaXRpYWxpemUgdGhlIG9iamVjdCdzIHByb3BlcnR5
IHN0b3JhZ2UgcG9pbnRlcgotICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoMCksIEFkZHJlc3Mo
cmVzdWx0LCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpKTsKLX0KLQotdGVtcGxhdGUgPHR5
cGVuYW1lIFQ+IGlubGluZSB2b2lkIEpJVDo6ZW1pdEFsbG9jYXRlSlNGaW5hbE9iamVjdChUIHN0
cnVjdHVyZSwgUmVnaXN0ZXJJRCByZXN1bHQsIFJlZ2lzdGVySUQgc2NyYXRjaCkKLXsKLSAgICBl
bWl0QWxsb2NhdGVCYXNpY0pTT2JqZWN0PEpTRmluYWxPYmplY3QsIE1hcmtlZEJsb2NrOjpOb25l
LCBUPihzdHJ1Y3R1cmUsIHJlc3VsdCwgc2NyYXRjaCk7Ci19Ci0KLSNpZiBFTkFCTEUoVkFMVUVf
UFJPRklMRVIpCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQ
cm9maWxlKiB2YWx1ZVByb2ZpbGUpCi17Ci0gICAgQVNTRVJUKHNob3VsZEVtaXRQcm9maWxpbmco
KSk7Ci0gICAgQVNTRVJUKHZhbHVlUHJvZmlsZSk7Ci0KLSAgICBjb25zdCBSZWdpc3RlcklEIHZh
bHVlID0gcmVnVDA7Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICBjb25zdCBSZWdpc3RlcklE
IHZhbHVlVGFnID0gcmVnVDE7Ci0jZW5kaWYKLSAgICBjb25zdCBSZWdpc3RlcklEIHNjcmF0Y2gg
PSByZWdUMzsKLSAgICAKLSAgICBpZiAoVmFsdWVQcm9maWxlOjpudW1iZXJPZkJ1Y2tldHMgPT0g
MSkgewotICAgICAgICAvLyBXZSdyZSBpbiBhIHNpbXBsZSBjb25maWd1cmF0aW9uOiBvbmx5IG9u
ZSBidWNrZXQsIHNvIHdlIGNhbiBqdXN0IGRvIGEgZGlyZWN0Ci0gICAgICAgIC8vIHN0b3JlLgot
I2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHN0b3JlNjQodmFsdWUsIHZhbHVlUHJvZmlsZS0+
bV9idWNrZXRzKTsKLSNlbHNlCi0gICAgICAgIEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqIGRlc2Ny
aXB0b3IgPSBiaXR3aXNlX2Nhc3Q8RW5jb2RlZFZhbHVlRGVzY3JpcHRvcio+KHZhbHVlUHJvZmls
ZS0+bV9idWNrZXRzKTsKLSAgICAgICAgc3RvcmUzMih2YWx1ZSwgJmRlc2NyaXB0b3ItPmFzQml0
cy5wYXlsb2FkKTsKLSAgICAgICAgc3RvcmUzMih2YWx1ZVRhZywgJmRlc2NyaXB0b3ItPmFzQml0
cy50YWcpOwotI2VuZGlmCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgaWYgKG1f
cmFuZG9tR2VuZXJhdG9yLmdldFVpbnQzMigpICYgMSkKLSAgICAgICAgYWRkMzIoVHJ1c3RlZElt
bTMyKDEpLCBidWNrZXRDb3VudGVyUmVnaXN0ZXIpOwotICAgIGVsc2UKLSAgICAgICAgYWRkMzIo
VHJ1c3RlZEltbTMyKDMpLCBidWNrZXRDb3VudGVyUmVnaXN0ZXIpOwotICAgIGFuZDMyKFRydXN0
ZWRJbW0zMihWYWx1ZVByb2ZpbGU6OmJ1Y2tldEluZGV4TWFzayksIGJ1Y2tldENvdW50ZXJSZWdp
c3Rlcik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKHZhbHVlUHJvZmlsZS0+bV9idWNrZXRzKSwg
c2NyYXRjaCk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBzdG9yZTY0KHZhbHVlLCBCYXNlSW5k
ZXgoc2NyYXRjaCwgYnVja2V0Q291bnRlclJlZ2lzdGVyLCBUaW1lc0VpZ2h0KSk7Ci0jZWxpZiBV
U0UoSlNWQUxVRTMyXzY0KQotICAgIHN0b3JlMzIodmFsdWUsIEJhc2VJbmRleChzY3JhdGNoLCBi
dWNrZXRDb3VudGVyUmVnaXN0ZXIsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVl
LCB1LmFzQml0cy5wYXlsb2FkKSkpOwotICAgIHN0b3JlMzIodmFsdWVUYWcsIEJhc2VJbmRleChz
Y3JhdGNoLCBidWNrZXRDb3VudGVyUmVnaXN0ZXIsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRP
RihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSk7Ci0jZW5kaWYKLX0KLQotaW5saW5lIHZvaWQgSklU
OjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQotewotICAg
IGlmICghc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShtX2NvZGVCbG9jay0+dmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVPZmZz
ZXQoYnl0ZWNvZGVPZmZzZXQpKTsKLX0KLQotaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKCkKLXsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1fYnl0ZWNvZGVPZmZz
ZXQpOwotfQotI2VuZGlmIC8vIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKLQotaW5saW5lIHZvaWQg
SklUOjplbWl0QXJyYXlQcm9maWxpbmdTaXRlKFJlZ2lzdGVySUQgc3RydWN0dXJlQW5kSW5kZXhp
bmdUeXBlLCBSZWdpc3RlcklEIHNjcmF0Y2gsIEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlKQot
ewotICAgIFVOVVNFRF9QQVJBTShzY3JhdGNoKTsgLy8gV2UgaGFkIGZvdW5kIHRoaXMgc2NyYXRj
aCByZWdpc3RlciB1c2VmdWwgaGVyZSBiZWZvcmUsIHNvIEkgd2lsbCBrZWVwIGl0IGZvciBub3cu
Ci0gICAgCi0gICAgUmVnaXN0ZXJJRCBzdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmVBbmRJbmRleGluZ1R5
cGU7Ci0gICAgUmVnaXN0ZXJJRCBpbmRleGluZ1R5cGUgPSBzdHJ1Y3R1cmVBbmRJbmRleGluZ1R5
cGU7Ci0gICAgCi0gICAgaWYgKGNhbkJlT3B0aW1pemVkKCkpCi0gICAgICAgIHN0b3JlUHRyKHN0
cnVjdHVyZSwgYXJyYXlQcm9maWxlLT5hZGRyZXNzT2ZMYXN0U2VlblN0cnVjdHVyZSgpKTsKLQot
ICAgIGxvYWQ4KEFkZHJlc3Moc3RydWN0dXJlLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNl
dCgpKSwgaW5kZXhpbmdUeXBlKTsKLX0KLQotaW5saW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9m
aWxpbmdTaXRlRm9yQnl0ZWNvZGVJbmRleChSZWdpc3RlcklEIHN0cnVjdHVyZUFuZEluZGV4aW5n
VHlwZSwgUmVnaXN0ZXJJRCBzY3JhdGNoLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQotewotI2lm
IEVOQUJMRShWQUxVRV9QUk9GSUxFUikKLSAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlKHN0cnVj
dHVyZUFuZEluZGV4aW5nVHlwZSwgc2NyYXRjaCwgbV9jb2RlQmxvY2stPmdldE9yQWRkQXJyYXlQ
cm9maWxlKGJ5dGVjb2RlSW5kZXgpKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGJ5dGVjb2Rl
SW5kZXgpOwotICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGUoc3RydWN0dXJlQW5kSW5kZXhpbmdU
eXBlLCBzY3JhdGNoLCAwKTsKLSNlbmRpZgotfQotCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRBcnJh
eVByb2ZpbGVTdG9yZVRvSG9sZVNwZWNpYWxDYXNlKEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxl
KQotewotI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikgICAgCi0gICAgc3RvcmU4KFRydXN0ZWRJ
bW0zMigxKSwgYXJyYXlQcm9maWxlLT5hZGRyZXNzT2ZNYXlTdG9yZVRvSG9sZSgpKTsKLSNlbHNl
Ci0gICAgVU5VU0VEX1BBUkFNKGFycmF5UHJvZmlsZSk7Ci0jZW5kaWYKLX0KLQotc3RhdGljIGlu
bGluZSBib29sIGFycmF5UHJvZmlsZVNhdyhBcnJheU1vZGVzIGFycmF5TW9kZXMsIEluZGV4aW5n
VHlwZSBjYXBhYmlsaXR5KQotewotI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKLSAgICByZXR1
cm4gYXJyYXlNb2Rlc0luY2x1ZGUoYXJyYXlNb2RlcywgY2FwYWJpbGl0eSk7Ci0jZWxzZQotICAg
IFVOVVNFRF9QQVJBTShhcnJheU1vZGVzKTsKLSAgICBVTlVTRURfUEFSQU0oY2FwYWJpbGl0eSk7
Ci0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi19Ci0KLWlubGluZSBKSVRBcnJheU1vZGUgSklU
OjpjaG9vc2VBcnJheU1vZGUoQXJyYXlQcm9maWxlKiBwcm9maWxlKQotewotICAgIHByb2ZpbGUt
PmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihtX2NvZGVCbG9jayk7Ci0gICAgQXJyYXlNb2RlcyBh
cnJheU1vZGVzID0gcHJvZmlsZS0+b2JzZXJ2ZWRBcnJheU1vZGVzKCk7Ci0gICAgaWYgKGFycmF5
UHJvZmlsZVNhdyhhcnJheU1vZGVzLCBEb3VibGVTaGFwZSkpCi0gICAgICAgIHJldHVybiBKSVRE
b3VibGU7Ci0gICAgaWYgKGFycmF5UHJvZmlsZVNhdyhhcnJheU1vZGVzLCBJbnQzMlNoYXBlKSkK
LSAgICAgICAgcmV0dXJuIEpJVEludDMyOwotICAgIGlmIChhcnJheVByb2ZpbGVTYXcoYXJyYXlN
b2RlcywgQXJyYXlTdG9yYWdlU2hhcGUpKQotICAgICAgICByZXR1cm4gSklUQXJyYXlTdG9yYWdl
OwotICAgIHJldHVybiBKSVRDb250aWd1b3VzOwotfQotCi0jaWYgVVNFKEpTVkFMVUUzMl82NCkK
LQotaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZFRhZyhpbnQgaW5kZXgsIFJlZ2lzdGVySUQgdGFn
KQotewotICAgIFJlZ2lzdGVySUQgbWFwcGVkVGFnOwotICAgIGlmIChnZXRNYXBwZWRUYWcoaW5k
ZXgsIG1hcHBlZFRhZykpIHsKLSAgICAgICAgbW92ZShtYXBwZWRUYWcsIHRhZyk7Ci0gICAgICAg
IHVubWFwKHRhZyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAobV9jb2RlQmxv
Y2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGluZGV4KSkgewotICAgICAgICBtb3ZlKEltbTMy
KGdldENvbnN0YW50T3BlcmFuZChpbmRleCkudGFnKCkpLCB0YWcpOwotICAgICAgICB1bm1hcCh0
YWcpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbG9hZDMyKHRhZ0ZvcihpbmRleCks
IHRhZyk7Ci0gICAgdW5tYXAodGFnKTsKLX0KLQotaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZFBh
eWxvYWQoaW50IGluZGV4LCBSZWdpc3RlcklEIHBheWxvYWQpCi17Ci0gICAgUmVnaXN0ZXJJRCBt
YXBwZWRQYXlsb2FkOwotICAgIGlmIChnZXRNYXBwZWRQYXlsb2FkKGluZGV4LCBtYXBwZWRQYXls
b2FkKSkgewotICAgICAgICBtb3ZlKG1hcHBlZFBheWxvYWQsIHBheWxvYWQpOwotICAgICAgICB1
bm1hcChwYXlsb2FkKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChtX2NvZGVC
bG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW5kZXgpKSB7Ci0gICAgICAgIG1vdmUoSW1t
MzIoZ2V0Q29uc3RhbnRPcGVyYW5kKGluZGV4KS5wYXlsb2FkKCkpLCBwYXlsb2FkKTsKLSAgICAg
ICAgdW5tYXAocGF5bG9hZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBsb2FkMzIo
cGF5bG9hZEZvcihpbmRleCksIHBheWxvYWQpOwotICAgIHVubWFwKHBheWxvYWQpOwotfQotCi1p
bmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkKGNvbnN0IEpTVmFsdWUmIHYsIFJlZ2lzdGVySUQgdGFn
LCBSZWdpc3RlcklEIHBheWxvYWQpCi17Ci0gICAgbW92ZShJbW0zMih2LnBheWxvYWQoKSksIHBh
eWxvYWQpOwotICAgIG1vdmUoSW1tMzIodi50YWcoKSksIHRhZyk7Ci19Ci0KLWlubGluZSB2b2lk
IEpJVDo6ZW1pdExvYWQoaW50IGluZGV4LCBSZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJRCBwYXls
b2FkLCBSZWdpc3RlcklEIGJhc2UpCi17Ci0gICAgQVNTRVJUKHRhZyAhPSBwYXlsb2FkKTsKLQot
ICAgIGlmIChiYXNlID09IGNhbGxGcmFtZVJlZ2lzdGVyKSB7Ci0gICAgICAgIEFTU0VSVChwYXls
b2FkICE9IGJhc2UpOwotICAgICAgICBlbWl0TG9hZFBheWxvYWQoaW5kZXgsIHBheWxvYWQpOwot
ICAgICAgICBlbWl0TG9hZFRhZyhpbmRleCwgdGFnKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGlmIChwYXlsb2FkID09IGJhc2UpIHsgLy8gYXZvaWQgc3RvbXBpbmcgYmFzZQotICAg
ICAgICBsb2FkMzIodGFnRm9yKGluZGV4LCBiYXNlKSwgdGFnKTsKLSAgICAgICAgbG9hZDMyKHBh
eWxvYWRGb3IoaW5kZXgsIGJhc2UpLCBwYXlsb2FkKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGxvYWQzMihwYXlsb2FkRm9yKGluZGV4LCBiYXNlKSwgcGF5bG9hZCk7Ci0gICAgbG9h
ZDMyKHRhZ0ZvcihpbmRleCwgYmFzZSksIHRhZyk7Ci19Ci0KLWlubGluZSB2b2lkIEpJVDo6ZW1p
dExvYWQyKGludCBpbmRleDEsIFJlZ2lzdGVySUQgdGFnMSwgUmVnaXN0ZXJJRCBwYXlsb2FkMSwg
aW50IGluZGV4MiwgUmVnaXN0ZXJJRCB0YWcyLCBSZWdpc3RlcklEIHBheWxvYWQyKQotewotICAg
IGlmIChpc01hcHBlZChpbmRleDEpKSB7Ci0gICAgICAgIGVtaXRMb2FkKGluZGV4MSwgdGFnMSwg
cGF5bG9hZDEpOwotICAgICAgICBlbWl0TG9hZChpbmRleDIsIHRhZzIsIHBheWxvYWQyKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBlbWl0TG9hZChpbmRleDIsIHRhZzIsIHBheWxvYWQy
KTsKLSAgICBlbWl0TG9hZChpbmRleDEsIHRhZzEsIHBheWxvYWQxKTsKLX0KLQotaW5saW5lIHZv
aWQgSklUOjplbWl0TG9hZERvdWJsZShpbnQgaW5kZXgsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKLXsK
LSAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGluZGV4KSkgewot
ICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGluQ29uc3RhbnRQb29sID0gbV9jb2RlQmxv
Y2stPmNvbnN0YW50UmVnaXN0ZXIoaW5kZXgpOwotICAgICAgICBsb2FkRG91YmxlKCZpbkNvbnN0
YW50UG9vbCwgdmFsdWUpOwotICAgIH0gZWxzZQotICAgICAgICBsb2FkRG91YmxlKGFkZHJlc3NG
b3IoaW5kZXgpLCB2YWx1ZSk7Ci19Ci0KLWlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWRJbnQzMlRv
RG91YmxlKGludCBpbmRleCwgRlBSZWdpc3RlcklEIHZhbHVlKQotewotICAgIGlmIChtX2NvZGVC
bG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW5kZXgpKSB7Ci0gICAgICAgIFdyaXRlQmFy
cmllcjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wgPSBtX2NvZGVCbG9jay0+Y29uc3RhbnRSZWdp
c3RlcihpbmRleCk7Ci0gICAgICAgIGNoYXIqIGJ5dGVQb2ludGVyID0gcmVpbnRlcnByZXRfY2Fz
dDxjaGFyKj4oJmluQ29uc3RhbnRQb29sKTsKLSAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUo
QWJzb2x1dGVBZGRyZXNzKGJ5dGVQb2ludGVyICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUu
YXNCaXRzLnBheWxvYWQpKSwgdmFsdWUpOwotICAgIH0gZWxzZQotICAgICAgICBjb252ZXJ0SW50
MzJUb0RvdWJsZShwYXlsb2FkRm9yKGluZGV4KSwgdmFsdWUpOwotfQotCi1pbmxpbmUgdm9pZCBK
SVQ6OmVtaXRTdG9yZShpbnQgaW5kZXgsIFJlZ2lzdGVySUQgdGFnLCBSZWdpc3RlcklEIHBheWxv
YWQsIFJlZ2lzdGVySUQgYmFzZSkKLXsKLSAgICBzdG9yZTMyKHBheWxvYWQsIHBheWxvYWRGb3Io
aW5kZXgsIGJhc2UpKTsKLSAgICBzdG9yZTMyKHRhZywgdGFnRm9yKGluZGV4LCBiYXNlKSk7Ci19
Ci0KLWlubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlSW50MzIoaW50IGluZGV4LCBSZWdpc3RlcklE
IHBheWxvYWQsIGJvb2wgaW5kZXhJc0ludDMyKQotewotICAgIHN0b3JlMzIocGF5bG9hZCwgcGF5
bG9hZEZvcihpbmRleCwgY2FsbEZyYW1lUmVnaXN0ZXIpKTsKLSAgICBpZiAoIWluZGV4SXNJbnQz
MikKLSAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCB0YWdG
b3IoaW5kZXgsIGNhbGxGcmFtZVJlZ2lzdGVyKSk7Ci19Ci0KLWlubGluZSB2b2lkIEpJVDo6ZW1p
dFN0b3JlQW5kTWFwSW50MzIoaW50IGluZGV4LCBSZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJRCBw
YXlsb2FkLCBib29sIGluZGV4SXNJbnQzMiwgc2l6ZV90IG9wY29kZUxlbmd0aCkKLXsKLSAgICBl
bWl0U3RvcmVJbnQzMihpbmRleCwgcGF5bG9hZCwgaW5kZXhJc0ludDMyKTsKLSAgICBtYXAobV9i
eXRlY29kZU9mZnNldCArIG9wY29kZUxlbmd0aCwgaW5kZXgsIHRhZywgcGF5bG9hZCk7Ci19Ci0K
LWlubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlSW50MzIoaW50IGluZGV4LCBUcnVzdGVkSW1tMzIg
cGF5bG9hZCwgYm9vbCBpbmRleElzSW50MzIpCi17Ci0gICAgc3RvcmUzMihwYXlsb2FkLCBwYXls
b2FkRm9yKGluZGV4LCBjYWxsRnJhbWVSZWdpc3RlcikpOwotICAgIGlmICghaW5kZXhJc0ludDMy
KQotICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHRhZ0Zv
cihpbmRleCwgY2FsbEZyYW1lUmVnaXN0ZXIpKTsKLX0KLQotaW5saW5lIHZvaWQgSklUOjplbWl0
U3RvcmVDZWxsKGludCBpbmRleCwgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXNDZWxs
KQotewotICAgIHN0b3JlMzIocGF5bG9hZCwgcGF5bG9hZEZvcihpbmRleCwgY2FsbEZyYW1lUmVn
aXN0ZXIpKTsKLSAgICBpZiAoIWluZGV4SXNDZWxsKQotICAgICAgICBzdG9yZTMyKFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgdGFnRm9yKGluZGV4LCBjYWxsRnJhbWVSZWdpc3Rlcikp
OwotfQotCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZUJvb2woaW50IGluZGV4LCBSZWdpc3Rl
cklEIHBheWxvYWQsIGJvb2wgaW5kZXhJc0Jvb2wpCi17Ci0gICAgc3RvcmUzMihwYXlsb2FkLCBw
YXlsb2FkRm9yKGluZGV4LCBjYWxsRnJhbWVSZWdpc3RlcikpOwotICAgIGlmICghaW5kZXhJc0Jv
b2wpCi0gICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJvb2xlYW5UYWcpLCB0
YWdGb3IoaW5kZXgsIGNhbGxGcmFtZVJlZ2lzdGVyKSk7Ci19Ci0KLWlubGluZSB2b2lkIEpJVDo6
ZW1pdFN0b3JlRG91YmxlKGludCBpbmRleCwgRlBSZWdpc3RlcklEIHZhbHVlKQotewotICAgIHN0
b3JlRG91YmxlKHZhbHVlLCBhZGRyZXNzRm9yKGluZGV4KSk7Ci19Ci0KLWlubGluZSB2b2lkIEpJ
VDo6ZW1pdFN0b3JlKGludCBpbmRleCwgY29uc3QgSlNWYWx1ZSBjb25zdGFudCwgUmVnaXN0ZXJJ
RCBiYXNlKQotewotICAgIHN0b3JlMzIoSW1tMzIoY29uc3RhbnQucGF5bG9hZCgpKSwgcGF5bG9h
ZEZvcihpbmRleCwgYmFzZSkpOwotICAgIHN0b3JlMzIoSW1tMzIoY29uc3RhbnQudGFnKCkpLCB0
YWdGb3IoaW5kZXgsIGJhc2UpKTsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdElu
aXRSZWdpc3Rlcih1bnNpZ25lZCBkc3QpCi17Ci0gICAgZW1pdFN0b3JlKGRzdCwganNVbmRlZmlu
ZWQoKSk7Ci19Ci0KLWlubGluZSBib29sIEpJVDo6aXNMYWJlbGVkKHVuc2lnbmVkIGJ5dGVjb2Rl
T2Zmc2V0KQotewotICAgIGZvciAoc2l6ZV90IG51bWJlck9mSnVtcFRhcmdldHMgPSBtX2NvZGVC
bG9jay0+bnVtYmVyT2ZKdW1wVGFyZ2V0cygpOyBtX2p1bXBUYXJnZXRJbmRleCAhPSBudW1iZXJP
Zkp1bXBUYXJnZXRzOyArK21fanVtcFRhcmdldEluZGV4KSB7Ci0gICAgICAgIHVuc2lnbmVkIGp1
bXBUYXJnZXQgPSBtX2NvZGVCbG9jay0+anVtcFRhcmdldChtX2p1bXBUYXJnZXRJbmRleCk7Ci0g
ICAgICAgIGlmIChqdW1wVGFyZ2V0ID09IGJ5dGVjb2RlT2Zmc2V0KQotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIGlmIChqdW1wVGFyZ2V0ID4gYnl0ZWNvZGVPZmZzZXQpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotaW5s
aW5lIHZvaWQgSklUOjptYXAodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIGludCB2aXJ0dWFsUmVn
aXN0ZXJJbmRleCwgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCkKLXsKLSAgICBp
ZiAoaXNMYWJlbGVkKGJ5dGVjb2RlT2Zmc2V0KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9t
YXBwZWRCeXRlY29kZU9mZnNldCA9IGJ5dGVjb2RlT2Zmc2V0OwotICAgIG1fbWFwcGVkVmlydHVh
bFJlZ2lzdGVySW5kZXggPSB2aXJ0dWFsUmVnaXN0ZXJJbmRleDsKLSAgICBtX21hcHBlZFRhZyA9
IHRhZzsKLSAgICBtX21hcHBlZFBheWxvYWQgPSBwYXlsb2FkOwotICAgIAotICAgIEFTU0VSVCgh
Y2FuQmVPcHRpbWl6ZWQoKSB8fCBtX21hcHBlZFBheWxvYWQgPT0gcmVnVDApOwotICAgIEFTU0VS
VCghY2FuQmVPcHRpbWl6ZWQoKSB8fCBtX21hcHBlZFRhZyA9PSByZWdUMSk7Ci19Ci0KLWlubGlu
ZSB2b2lkIEpJVDo6dW5tYXAoUmVnaXN0ZXJJRCByZWdpc3RlcklEKQotewotICAgIGlmIChtX21h
cHBlZFRhZyA9PSByZWdpc3RlcklEKQotICAgICAgICBtX21hcHBlZFRhZyA9IChSZWdpc3RlcklE
KS0xOwotICAgIGVsc2UgaWYgKG1fbWFwcGVkUGF5bG9hZCA9PSByZWdpc3RlcklEKQotICAgICAg
ICBtX21hcHBlZFBheWxvYWQgPSAoUmVnaXN0ZXJJRCktMTsKLX0KLQotaW5saW5lIHZvaWQgSklU
Ojp1bm1hcCgpCi17Ci0gICAgbV9tYXBwZWRCeXRlY29kZU9mZnNldCA9ICh1bnNpZ25lZCktMTsK
LSAgICBtX21hcHBlZFZpcnR1YWxSZWdpc3RlckluZGV4ID0gSlNTdGFjazo6UmV0dXJuUEM7Ci0g
ICAgbV9tYXBwZWRUYWcgPSAoUmVnaXN0ZXJJRCktMTsKLSAgICBtX21hcHBlZFBheWxvYWQgPSAo
UmVnaXN0ZXJJRCktMTsKLX0KLQotaW5saW5lIGJvb2wgSklUOjppc01hcHBlZChpbnQgdmlydHVh
bFJlZ2lzdGVySW5kZXgpCi17Ci0gICAgaWYgKG1fbWFwcGVkQnl0ZWNvZGVPZmZzZXQgIT0gbV9i
eXRlY29kZU9mZnNldCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChtX21hcHBlZFZp
cnR1YWxSZWdpc3RlckluZGV4ICE9IHZpcnR1YWxSZWdpc3RlckluZGV4KQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWlubGluZSBib29sIEpJVDo6Z2V0TWFw
cGVkUGF5bG9hZChpbnQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIFJlZ2lzdGVySUQmIHBheWxvYWQp
Ci17Ci0gICAgaWYgKG1fbWFwcGVkQnl0ZWNvZGVPZmZzZXQgIT0gbV9ieXRlY29kZU9mZnNldCkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChtX21hcHBlZFZpcnR1YWxSZWdpc3Rlcklu
ZGV4ICE9IHZpcnR1YWxSZWdpc3RlckluZGV4KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
aWYgKG1fbWFwcGVkUGF5bG9hZCA9PSAoUmVnaXN0ZXJJRCktMSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIHBheWxvYWQgPSBtX21hcHBlZFBheWxvYWQ7Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLWlubGluZSBib29sIEpJVDo6Z2V0TWFwcGVkVGFnKGludCB2aXJ0dWFsUmVnaXN0ZXJJbmRl
eCwgUmVnaXN0ZXJJRCYgdGFnKQotewotICAgIGlmIChtX21hcHBlZEJ5dGVjb2RlT2Zmc2V0ICE9
IG1fYnl0ZWNvZGVPZmZzZXQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAobV9tYXBw
ZWRWaXJ0dWFsUmVnaXN0ZXJJbmRleCAhPSB2aXJ0dWFsUmVnaXN0ZXJJbmRleCkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIGlmIChtX21hcHBlZFRhZyA9PSAoUmVnaXN0ZXJJRCktMSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHRhZyA9IG1fbWFwcGVkVGFnOwotICAgIHJldHVybiB0
cnVlOwotfQotCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChp
bnQgdmlydHVhbFJlZ2lzdGVySW5kZXgpCi17Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93
bk5vdEltbWVkaWF0ZSh2aXJ0dWFsUmVnaXN0ZXJJbmRleCkpIHsKLSAgICAgICAgaWYgKG1fY29k
ZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleCh2aXJ0dWFsUmVnaXN0ZXJJbmRleCkpCi0g
ICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBhZGRTbG93Q2FzZShlbWl0SnVtcElmTm90SlNDZWxsKHZpcnR1YWxSZWdpc3RlckluZGV4KSk7
Ci0gICAgfQotfQotCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChpbnQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIFJlZ2lzdGVySUQgdGFnKQotewotICAgIGlmICgh
bV9jb2RlQmxvY2stPmlzS25vd25Ob3RJbW1lZGlhdGUodmlydHVhbFJlZ2lzdGVySW5kZXgpKSB7
Ci0gICAgICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgodmlydHVh
bFJlZ2lzdGVySW5kZXgpKQotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHRhZywg
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKSk7Ci0gICAgfQotfQotCi1BTFdBWVNfSU5M
SU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudEltbWVkaWF0ZUludCh1bnNpZ25lZCBzcmMp
Ci17Ci0gICAgcmV0dXJuIG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChzcmMp
ICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKLX0KLQotQUxXQVlTX0lOTElO
RSBib29sIEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50SW1tZWRpYXRlSW50KHVuc2lnbmVkIG9wMSwg
dW5zaWduZWQgb3AyLCB1bnNpZ25lZCYgb3AsIGludDMyX3QmIGNvbnN0YW50KQotewotICAgIGlm
IChpc09wZXJhbmRDb25zdGFudEltbWVkaWF0ZUludChvcDEpKSB7Ci0gICAgICAgIGNvbnN0YW50
ID0gZ2V0Q29uc3RhbnRPcGVyYW5kKG9wMSkuYXNJbnQzMigpOwotICAgICAgICBvcCA9IG9wMjsK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKGlzT3BlcmFuZENvbnN0YW50
SW1tZWRpYXRlSW50KG9wMikpIHsKLSAgICAgICAgY29uc3RhbnQgPSBnZXRDb25zdGFudE9wZXJh
bmQob3AyKS5hc0ludDMyKCk7Ci0gICAgICAgIG9wID0gb3AxOwotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi0jZWxzZSAvLyBVU0UoSlNW
QUxVRTMyXzY0KQotCi0vKiBEZXByZWNhdGVkOiBQbGVhc2UgdXNlIEpJVFN0dWJDYWxsIGluc3Rl
YWQuICovCi0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRKSVRTdHViQXJnKHVuc2ln
bmVkIGFyZ3VtZW50TnVtYmVyLCBSZWdpc3RlcklEIGRzdCkKLXsKLSAgICB1bnNpZ25lZCBhcmd1
bWVudFN0YWNrT2Zmc2V0ID0gKGFyZ3VtZW50TnVtYmVyICogKHNpemVvZihKU1ZhbHVlKSAvIHNp
emVvZih2b2lkKikpKSArIEpJVFNUQUNLRlJBTUVfQVJHU19JTkRFWDsKLSAgICBwZWVrNjQoZHN0
LCBhcmd1bWVudFN0YWNrT2Zmc2V0KTsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6a2ls
bExhc3RSZXN1bHRSZWdpc3RlcigpCi17Ci0gICAgbV9sYXN0UmVzdWx0Qnl0ZWNvZGVSZWdpc3Rl
ciA9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCk7Ci19Ci0KLS8vIGdldCBhcmcgcHV0
cyBhbiBhcmcgZnJvbSB0aGUgU0YgcmVnaXN0ZXIgYXJyYXkgaW50byBhIGgvdyByZWdpc3Rlcgot
QUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnQgc3JjLCBS
ZWdpc3RlcklEIGRzdCkKLXsKLSAgICBBU1NFUlQobV9ieXRlY29kZU9mZnNldCAhPSAodW5zaWdu
ZWQpLTEpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9j
b2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlT2Zmc2V0IGlzIHNldC4KLQot
ICAgIC8vIFRPRE86IHdlIHdhbnQgdG8gcmV1c2UgdmFsdWVzIHRoYXQgYXJlIGFscmVhZHkgaW4g
cmVnaXN0ZXJzIGlmIHdlIGNhbiAtIGFkZCBhIHJlZ2lzdGVyIGFsbG9jYXRvciEKLSAgICBpZiAo
bV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHNyYykpIHsKLSAgICAgICAgSlNW
YWx1ZSB2YWx1ZSA9IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwotICAgICAgICBpZiAo
IXZhbHVlLmlzTnVtYmVyKCkpCi0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVl
OjplbmNvZGUodmFsdWUpKSwgZHN0KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbW92ZShJ
bW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUpKSwgZHN0KTsKLSAgICAgICAga2lsbExhc3RSZXN1
bHRSZWdpc3RlcigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKHNyYyA9PSBt
X2xhc3RSZXN1bHRCeXRlY29kZVJlZ2lzdGVyICYmIG1fY29kZUJsb2NrLT5pc1RlbXBvcmFyeVJl
Z2lzdGVySW5kZXgoc3JjKSAmJiAhYXRKdW1wVGFyZ2V0KCkpIHsKLSAgICAgICAgLy8gVGhlIGFy
Z3VtZW50IHdlIHdhbnQgaXMgYWxyZWFkeSBzdG9yZWQgaW4gZWF4Ci0gICAgICAgIGlmIChkc3Qg
IT0gY2FjaGVkUmVzdWx0UmVnaXN0ZXIpCi0gICAgICAgICAgICBtb3ZlKGNhY2hlZFJlc3VsdFJl
Z2lzdGVyLCBkc3QpOwotICAgICAgICBraWxsTGFzdFJlc3VsdFJlZ2lzdGVyKCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBsb2FkNjQoQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rlciwg
c3JjICogc2l6ZW9mKFJlZ2lzdGVyKSksIGRzdCk7Ci0gICAga2lsbExhc3RSZXN1bHRSZWdpc3Rl
cigpOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVy
cyhpbnQgc3JjMSwgUmVnaXN0ZXJJRCBkc3QxLCBpbnQgc3JjMiwgUmVnaXN0ZXJJRCBkc3QyKQot
ewotICAgIGlmIChzcmMyID09IG1fbGFzdFJlc3VsdEJ5dGVjb2RlUmVnaXN0ZXIpIHsKLSAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMyLCBkc3QyKTsKLSAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzcmMxLCBkc3QxKTsKLSAgICB9IGVsc2UgewotICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNyYzEsIGRzdDEpOwotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNyYzIsIGRzdDIpOwotICAgIH0KLX0KLQotQUxXQVlTX0lOTElORSBpbnQzMl90IEpJVDo6
Z2V0Q29uc3RhbnRPcGVyYW5kSW1tZWRpYXRlSW50KHVuc2lnbmVkIHNyYykKLXsKLSAgICByZXR1
cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNJbnQzMigpOwotfQotCi1BTFdBWVNfSU5MSU5F
IGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudEltbWVkaWF0ZUludCh1bnNpZ25lZCBzcmMpCi17
Ci0gICAgcmV0dXJuIG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChzcmMpICYm
IGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKLX0KLQotQUxXQVlTX0lOTElORSB2
b2lkIEpJVDo6ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcih1bnNpZ25lZCBkc3QsIFJlZ2lzdGVySUQg
ZnJvbSkKLXsKLSAgICBzdG9yZTY0KGZyb20sIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIGRz
dCAqIHNpemVvZihSZWdpc3RlcikpKTsKLSAgICBtX2xhc3RSZXN1bHRCeXRlY29kZVJlZ2lzdGVy
ID0gKGZyb20gPT0gY2FjaGVkUmVzdWx0UmVnaXN0ZXIpID8gc3RhdGljX2Nhc3Q8aW50Pihkc3Qp
IDogc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKTsKLX0KLQotQUxXQVlTX0lOTElORSB2
b2lkIEpJVDo6ZW1pdEluaXRSZWdpc3Rlcih1bnNpZ25lZCBkc3QpCi17Ci0gICAgc3RvcmU2NChU
cnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSwgQWRkcmVzcyhjYWxs
RnJhbWVSZWdpc3RlciwgZHN0ICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwotfQotCi1BTFdBWVNfSU5M
SU5FIEpJVDo6SnVtcCBKSVQ6OmVtaXRKdW1wSWZKU0NlbGwoUmVnaXN0ZXJJRCByZWcpCi17Ci0g
ICAgcmV0dXJuIGJyYW5jaFRlc3Q2NChaZXJvLCByZWcsIHRhZ01hc2tSZWdpc3Rlcik7Ci19Ci0K
LUFMV0FZU19JTkxJTkUgSklUOjpKdW1wIEpJVDo6ZW1pdEp1bXBJZkJvdGhKU0NlbGxzKFJlZ2lz
dGVySUQgcmVnMSwgUmVnaXN0ZXJJRCByZWcyLCBSZWdpc3RlcklEIHNjcmF0Y2gpCi17Ci0gICAg
bW92ZShyZWcxLCBzY3JhdGNoKTsKLSAgICBvcjY0KHJlZzIsIHNjcmF0Y2gpOwotICAgIHJldHVy
biBlbWl0SnVtcElmSlNDZWxsKHNjcmF0Y2gpOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklU
OjplbWl0SnVtcFNsb3dDYXNlSWZKU0NlbGwoUmVnaXN0ZXJJRCByZWcpCi17Ci0gICAgYWRkU2xv
d0Nhc2UoZW1pdEp1bXBJZkpTQ2VsbChyZWcpKTsKLX0KLQotQUxXQVlTX0lOTElORSBKSVQ6Okp1
bXAgSklUOjplbWl0SnVtcElmTm90SlNDZWxsKFJlZ2lzdGVySUQgcmVnKQotewotICAgIHJldHVy
biBicmFuY2hUZXN0NjQoTm9uWmVybywgcmVnLCB0YWdNYXNrUmVnaXN0ZXIpOwotfQotCi1BTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoUmVnaXN0ZXJJ
RCByZWcpCi17Ci0gICAgYWRkU2xvd0Nhc2UoZW1pdEp1bXBJZk5vdEpTQ2VsbChyZWcpKTsKLX0K
LQotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFJl
Z2lzdGVySUQgcmVnLCBpbnQgdlJlZykKLXsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3du
Tm90SW1tZWRpYXRlKHZSZWcpKQotICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
cmVnKTsKLX0KLQotaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZERvdWJsZShpbnQgaW5kZXgsIEZQ
UmVnaXN0ZXJJRCB2YWx1ZSkKLXsKLSAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdp
c3RlckluZGV4KGluZGV4KSkgewotICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGluQ29u
c3RhbnRQb29sID0gbV9jb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIoaW5kZXgpOwotICAgICAg
ICBsb2FkRG91YmxlKCZpbkNvbnN0YW50UG9vbCwgdmFsdWUpOwotICAgIH0gZWxzZQotICAgICAg
ICBsb2FkRG91YmxlKGFkZHJlc3NGb3IoaW5kZXgpLCB2YWx1ZSk7Ci19Ci0KLWlubGluZSB2b2lk
IEpJVDo6ZW1pdExvYWRJbnQzMlRvRG91YmxlKGludCBpbmRleCwgRlBSZWdpc3RlcklEIHZhbHVl
KQotewotICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW5kZXgp
KSB7Ci0gICAgICAgIEFTU0VSVChpc09wZXJhbmRDb25zdGFudEltbWVkaWF0ZUludChpbmRleCkp
OwotICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShJbW0zMihnZXRDb25zdGFudE9wZXJhbmQo
aW5kZXgpLmFzSW50MzIoKSksIHZhbHVlKTsKLSAgICB9IGVsc2UKLSAgICAgICAgY29udmVydElu
dDMyVG9Eb3VibGUoYWRkcmVzc0ZvcihpbmRleCksIHZhbHVlKTsKLX0KLQotQUxXQVlTX0lOTElO
RSBKSVQ6Okp1bXAgSklUOjplbWl0SnVtcElmSW1tZWRpYXRlSW50ZWdlcihSZWdpc3RlcklEIHJl
ZykKLXsKLSAgICByZXR1cm4gYnJhbmNoNjQoQWJvdmVPckVxdWFsLCByZWcsIHRhZ1R5cGVOdW1i
ZXJSZWdpc3Rlcik7Ci19Ci0KLUFMV0FZU19JTkxJTkUgSklUOjpKdW1wIEpJVDo6ZW1pdEp1bXBJ
Zk5vdEltbWVkaWF0ZUludGVnZXIoUmVnaXN0ZXJJRCByZWcpCi17Ci0gICAgcmV0dXJuIGJyYW5j
aDY0KEJlbG93LCByZWcsIHRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7Ci19Ci0KLUFMV0FZU19JTkxJ
TkUgSklUOjpKdW1wIEpJVDo6ZW1pdEp1bXBJZk5vdEltbWVkaWF0ZUludGVnZXJzKFJlZ2lzdGVy
SUQgcmVnMSwgUmVnaXN0ZXJJRCByZWcyLCBSZWdpc3RlcklEIHNjcmF0Y2gpCi17Ci0gICAgbW92
ZShyZWcxLCBzY3JhdGNoKTsKLSAgICBhbmQ2NChyZWcyLCBzY3JhdGNoKTsKLSAgICByZXR1cm4g
ZW1pdEp1bXBJZk5vdEltbWVkaWF0ZUludGVnZXIoc2NyYXRjaCk7Ci19Ci0KLUFMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbWVkaWF0ZUludGVnZXIoUmVnaXN0
ZXJJRCByZWcpCi17Ci0gICAgYWRkU2xvd0Nhc2UoZW1pdEp1bXBJZk5vdEltbWVkaWF0ZUludGVn
ZXIocmVnKSk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEltbWVkaWF0ZUludGVnZXJzKFJlZ2lzdGVySUQgcmVnMSwgUmVnaXN0ZXJJRCByZWcyLCBS
ZWdpc3RlcklEIHNjcmF0Y2gpCi17Ci0gICAgYWRkU2xvd0Nhc2UoZW1pdEp1bXBJZk5vdEltbWVk
aWF0ZUludGVnZXJzKHJlZzEsIHJlZzIsIHNjcmF0Y2gpKTsKLX0KLQotQUxXQVlTX0lOTElORSB2
b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tZWRpYXRlTnVtYmVyKFJlZ2lzdGVySUQg
cmVnKQotewotICAgIGFkZFNsb3dDYXNlKGVtaXRKdW1wSWZOb3RJbW1lZGlhdGVOdW1iZXIocmVn
KSk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRGYXN0QXJpdGhSZVRhZ0ltbWVk
aWF0ZShSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQotewotICAgIGVtaXRGYXN0QXJp
dGhJbnRUb0ltbU5vQ2hlY2soc3JjLCBkZXN0KTsKLX0KLQotLy8gb3BlcmFuZCBpcyBpbnQzMl90
LCBtdXN0IGhhdmUgYmVlbiB6ZXJvLWV4dGVuZGVkIGlmIHJlZ2lzdGVyIGlzIDY0LWJpdC4KLUFM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRGYXN0QXJpdGhJbnRUb0ltbU5vQ2hlY2soUmVnaXN0
ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKLXsKLSAgICBpZiAoc3JjICE9IGRlc3QpCi0gICAg
ICAgIG1vdmUoc3JjLCBkZXN0KTsKLSAgICBvcjY0KHRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgZGVz
dCk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRUYWdBc0Jvb2xJbW1lZGlhdGUo
UmVnaXN0ZXJJRCByZWcpCi17Ci0gICAgb3IzMihUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50
MzJfdD4oVmFsdWVGYWxzZSkpLCByZWcpOwotfQotCi0jZW5kaWYgLy8gVVNFKEpTVkFMVUUzMl82
NCkKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBFTkFCTEUoSklUKQotCi0jZW5k
aWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCShyZXZpc2lvbiAx
MzM5NjUpCShmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lTWV0aG9kcy5o
OjEzMzk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAwNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCwg
MjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpJVElubGluZU1ldGhvZHNfaAorI2Rl
ZmluZSBKSVRJbmxpbmVNZXRob2RzX2gKKworCisjaWYgRU5BQkxFKEpJVCkKKworbmFtZXNwYWNl
IEpTQyB7CisKK0FMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50SW1tZWRp
YXRlRG91YmxlKHVuc2lnbmVkIHNyYykKK3sKKyAgICByZXR1cm4gbV9jb2RlQmxvY2stPmlzQ29u
c3RhbnRSZWdpc3RlckluZGV4KHNyYykgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNEb3Vi
bGUoKTsKK30KKworQUxXQVlTX0lOTElORSBKU1ZhbHVlIEpJVDo6Z2V0Q29uc3RhbnRPcGVyYW5k
KHVuc2lnbmVkIHNyYykKK3sKKyAgICBBU1NFUlQobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdp
c3RlckluZGV4KHNyYykpOworICAgIHJldHVybiBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3Jj
KTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dENlbGxUb0NhbGxGcmFtZUhl
YWRlcihSZWdpc3RlcklEIGZyb20sIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlckVudHJ5IGVudHJ5
KQoreworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6Q2VsbFRhZyksIHRhZ0ZvcihlbnRyeSwgY2FsbEZyYW1lUmVnaXN0ZXIpKTsKKyAgICBz
dG9yZTMyKGZyb20sIHBheWxvYWRGb3IoZW50cnksIGNhbGxGcmFtZVJlZ2lzdGVyKSk7CisjZWxz
ZQorICAgIHN0b3JlNjQoZnJvbSwgYWRkcmVzc0ZvcihlbnRyeSwgY2FsbEZyYW1lUmVnaXN0ZXIp
KTsKKyNlbmRpZgorfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0SW50VG9DYWxs
RnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJFbnRy
eSBlbnRyeSkKK3sKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIHN0b3JlMzIoVHJ1c3RlZElt
bTMyKEludDMyVGFnKSwgaW50VGFnRm9yKGVudHJ5LCBjYWxsRnJhbWVSZWdpc3RlcikpOworICAg
IHN0b3JlMzIoZnJvbSwgaW50UGF5bG9hZEZvcihlbnRyeSwgY2FsbEZyYW1lUmVnaXN0ZXIpKTsK
KyNlbHNlCisgICAgc3RvcmU2NChmcm9tLCBhZGRyZXNzRm9yKGVudHJ5LCBjYWxsRnJhbWVSZWdp
c3RlcikpOworI2VuZGlmCit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRUb0Nh
bGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlckVu
dHJ5IGVudHJ5KQoreworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgc3RvcmVQdHIoZnJvbSwg
cGF5bG9hZEZvcihlbnRyeSwgY2FsbEZyYW1lUmVnaXN0ZXIpKTsKKyNlbHNlCisgICAgc3RvcmU2
NChmcm9tLCBhZGRyZXNzRm9yKGVudHJ5LCBjYWxsRnJhbWVSZWdpc3RlcikpOworI2VuZGlmCit9
CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRJbW1lZGlhdGVUb0NhbGxGcmFtZUhl
YWRlcih2b2lkKiB2YWx1ZSwgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyRW50cnkgZW50cnkpCit7
CisgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cih2YWx1ZSksIEFkZHJlc3MoY2FsbEZyYW1lUmVn
aXN0ZXIsIGVudHJ5ICogc2l6ZW9mKFJlZ2lzdGVyKSkpOworfQorCitBTFdBWVNfSU5MSU5FIHZv
aWQgSklUOjplbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihKU1N0YWNrOjpDYWxsRnJhbWVI
ZWFkZXJFbnRyeSBlbnRyeSwgUmVnaXN0ZXJJRCB0bywgUmVnaXN0ZXJJRCBmcm9tKQoreworICAg
IGxvYWRQdHIoQWRkcmVzcyhmcm9tLCBlbnRyeSAqIHNpemVvZihSZWdpc3RlcikpLCB0byk7Cisj
aWYgVVNFKEpTVkFMVUU2NCkKKyAgICBraWxsTGFzdFJlc3VsdFJlZ2lzdGVyKCk7CisjZW5kaWYK
K30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXIz
MihKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJFbnRyeSBlbnRyeSwgUmVnaXN0ZXJJRCB0bywgUmVn
aXN0ZXJJRCBmcm9tKQoreworICAgIGxvYWQzMihBZGRyZXNzKGZyb20sIGVudHJ5ICogc2l6ZW9m
KFJlZ2lzdGVyKSksIHRvKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIGtpbGxMYXN0UmVzdWx0
UmVnaXN0ZXIoKTsKKyNlbmRpZgorfQorCisjaWYgVVNFKEpTVkFMVUU2NCkKK0FMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OmVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyNjQoSlNTdGFjazo6Q2FsbEZy
YW1lSGVhZGVyRW50cnkgZW50cnksIFJlZ2lzdGVySUQgdG8sIFJlZ2lzdGVySUQgZnJvbSkKK3sK
KyAgICBsb2FkNjQoQWRkcmVzcyhmcm9tLCBlbnRyeSAqIHNpemVvZihSZWdpc3RlcikpLCB0byk7
CisgICAga2lsbExhc3RSZXN1bHRSZWdpc3RlcigpOworfQorI2VuZGlmCisKK0FMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OmVtaXRMb2FkQ2hhcmFjdGVyU3RyaW5nKFJlZ2lzdGVySUQgc3JjLCBSZWdp
c3RlcklEIGRzdCwgSnVtcExpc3QmIGZhaWx1cmVzKQoreworICAgIGZhaWx1cmVzLmFwcGVuZChi
cmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3Moc3JjLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgp
KSwgVHJ1c3RlZEltbVB0cihtX2dsb2JhbERhdGEtPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsK
KyAgICBmYWlsdXJlcy5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHNyYywgVGh1bmtIZWxwZXJzOjpqc1N0cmluZ0xlbmd0aE9mZnNldCgpKSwgVHJ1c3Rl
ZEltbTMyKDEpKSk7CisgICAgbG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzcmMsIFRo
dW5rSGVscGVyczo6anNTdHJpbmdWYWx1ZU9mZnNldCgpKSwgZHN0KTsKKyAgICBmYWlsdXJlcy5h
cHBlbmQoYnJhbmNoVGVzdDMyKFplcm8sIGRzdCkpOworICAgIGxvYWRQdHIoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoZHN0LCBUaHVua0hlbHBlcnM6OnN0cmluZ0ltcGxGbGFnc09mZnNldCgpKSwg
cmVnVDEpOworICAgIGxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZHN0LCBUaHVua0hl
bHBlcnM6OnN0cmluZ0ltcGxEYXRhT2Zmc2V0KCkpLCBkc3QpOworCisgICAgSnVtcExpc3QgaXMx
NkJpdDsKKyAgICBKdW1wTGlzdCBjb250OEJpdDsKKyAgICBpczE2Qml0LmFwcGVuZChicmFuY2hU
ZXN0MzIoWmVybywgcmVnVDEsIFRydXN0ZWRJbW0zMihUaHVua0hlbHBlcnM6OnN0cmluZ0ltcGw4
Qml0RmxhZygpKSkpOworICAgIGxvYWQ4KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGRzdCwgMCks
IGRzdCk7CisgICAgY29udDhCaXQuYXBwZW5kKGp1bXAoKSk7CisgICAgaXMxNkJpdC5saW5rKHRo
aXMpOworICAgIGxvYWQxNihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhkc3QsIDApLCBkc3QpOwor
ICAgIGNvbnQ4Qml0LmxpbmsodGhpcyk7Cit9CisKK0FMV0FZU19JTkxJTkUgSklUOjpDYWxsIEpJ
VDo6ZW1pdE5ha2VkQ2FsbChDb2RlUHRyIGZ1bmN0aW9uKQoreworICAgIEFTU0VSVChtX2J5dGVj
b2RlT2Zmc2V0ICE9ICh1bnNpZ25lZCktMSk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJl
IGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNv
ZGVPZmZzZXQgaXMgc2V0LgorCisgICAgQ2FsbCBuYWtlZENhbGwgPSBuZWFyQ2FsbCgpOworICAg
IG1fY2FsbHMuYXBwZW5kKENhbGxSZWNvcmQobmFrZWRDYWxsLCBtX2J5dGVjb2RlT2Zmc2V0LCBm
dW5jdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKSk7CisgICAgcmV0dXJuIG5ha2VkQ2FsbDsKK30K
KworQUxXQVlTX0lOTElORSBib29sIEpJVDo6YXRKdW1wVGFyZ2V0KCkKK3sKKyAgICB3aGlsZSAo
bV9qdW1wVGFyZ2V0c1Bvc2l0aW9uIDwgbV9jb2RlQmxvY2stPm51bWJlck9mSnVtcFRhcmdldHMo
KSAmJiBtX2NvZGVCbG9jay0+anVtcFRhcmdldChtX2p1bXBUYXJnZXRzUG9zaXRpb24pIDw9IG1f
Ynl0ZWNvZGVPZmZzZXQpIHsKKyAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5qdW1wVGFyZ2V0KG1f
anVtcFRhcmdldHNQb3NpdGlvbikgPT0gbV9ieXRlY29kZU9mZnNldCkKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICArK21fanVtcFRhcmdldHNQb3NpdGlvbjsKKyAgICB9CisgICAg
cmV0dXJuIGZhbHNlOworfQorCisjaWYgZGVmaW5lZChBU1NFTUJMRVJfSEFTX0NPTlNUQU5UX1BP
T0wpICYmIEFTU0VNQkxFUl9IQVNfQ09OU1RBTlRfUE9PTAorCitBTFdBWVNfSU5MSU5FIHZvaWQg
SklUOjpiZWdpblVuaW50ZXJydXB0ZWRTZXF1ZW5jZShpbnQgaW5zblNwYWNlLCBpbnQgY29uc3RT
cGFjZSkKK3sKKyNpZiBDUFUoQVJNX1RSQURJVElPTkFMKQorI2lmbmRlZiBOREVCVUcKKyAgICAv
LyBFbnN1cmUgdGhlIGxhYmVsIGFmdGVyIHRoZSBzZXF1ZW5jZSBjYW4gYWxzbyBmaXQKKyAgICBp
bnNuU3BhY2UgKz0gc2l6ZW9mKEFSTVdvcmQpOworICAgIGNvbnN0U3BhY2UgKz0gc2l6ZW9mKHVp
bnQ2NF90KTsKKyNlbmRpZgorCisgICAgZW5zdXJlU3BhY2UoaW5zblNwYWNlLCBjb25zdFNwYWNl
KTsKKworI2VsaWYgQ1BVKFNINCkKKyNpZm5kZWYgTkRFQlVHCisgICAgaW5zblNwYWNlICs9IHNp
emVvZihTSDRXb3JkKTsKKyAgICBjb25zdFNwYWNlICs9IHNpemVvZih1aW50NjRfdCk7CisjZW5k
aWYKKworICAgIG1fYXNzZW1ibGVyLmVuc3VyZVNwYWNlKGluc25TcGFjZSArIG1fYXNzZW1ibGVy
Lm1heEluc3RydWN0aW9uU2l6ZSArIDIsIGNvbnN0U3BhY2UgKyA4KTsKKyNlbmRpZgorCisjaWYg
ZGVmaW5lZChBU1NFTUJMRVJfSEFTX0NPTlNUQU5UX1BPT0wpICYmIEFTU0VNQkxFUl9IQVNfQ09O
U1RBTlRfUE9PTAorI2lmbmRlZiBOREVCVUcKKyAgICBtX3VuaW50ZXJydXB0ZWRJbnN0cnVjdGlv
blNlcXVlbmNlQmVnaW4gPSBsYWJlbCgpOworICAgIG1fdW5pbnRlcnJ1cHRlZENvbnN0YW50U2Vx
dWVuY2VCZWdpbiA9IHNpemVPZkNvbnN0YW50UG9vbCgpOworI2VuZGlmCisjZW5kaWYKK30KKwor
QUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW5kVW5pbnRlcnJ1cHRlZFNlcXVlbmNlKGludCBpbnNu
U3BhY2UsIGludCBjb25zdFNwYWNlLCBpbnQgZHN0KQoreworICAgIFVOVVNFRF9QQVJBTShkc3Qp
OworI2lmIGRlZmluZWQoQVNTRU1CTEVSX0hBU19DT05TVEFOVF9QT09MKSAmJiBBU1NFTUJMRVJf
SEFTX0NPTlNUQU5UX1BPT0wKKyAgICAvKiBUaGVyZSBhcmUgc2V2ZXJhbCBjYXNlcyB3aGVuIHRo
ZSB1bmludGVycnVwdGVkIHNlcXVlbmNlIGlzIGxhcmdlciB0aGFuCisgICAgICogbWF4aW11bSBy
ZXF1aXJlZCBvZmZzZXQgZm9yIHBhdGhpbmcgdGhlIHNhbWUgc2VxdWVuY2UuIEVnLjogaWYgaW4g
YQorICAgICAqIHVuaW50ZXJydXB0ZWQgc2VxdWVuY2UgdGhlIGxhc3QgbWFjcm9hc3NlbWJsZXIn
cyBpbnN0cnVjdGlvbiBpcyBhIHN0dWIKKyAgICAgKiBjYWxsLCBpdCBlbWl0cyBzdG9yZSBpbnN0
cnVjdGlvbihzKSB3aGljaCBzaG91bGQgbm90IGJlIGluY2x1ZGVkIGluIHRoZQorICAgICAqIGNh
bGN1bGF0aW9uIG9mIGxlbmd0aCBvZiB1bmludGVycnVwdGVkIHNlcXVlbmNlLiBTbywgdGhlIGlu
c25TcGFjZSBhbmQKKyAgICAgKiBjb25zdFNwYWNlIHNob3VsZCBiZSB1cHBlciBsaW1pdCBpbnN0
ZWFkIG9mIGhhcmQgbGltaXQuCisgICAgICovCisjaWYgQ1BVKFNINCkKKyAgICBpZiAoKGRzdCA+
IDE1KSB8fCAoZHN0IDwgLTE2KSkgeworICAgICAgICBpbnNuU3BhY2UgKz0gODsKKyAgICAgICAg
Y29uc3RTcGFjZSArPSAyOworICAgIH0KKworICAgIGlmICgoKGRzdCA+PSAtMTYpICYmIChkc3Qg
PCAwKSkgfHwgKChkc3QgPiA3KSAmJiAoZHN0IDw9IDE1KSkpCisgICAgICAgIGluc25TcGFjZSAr
PSA4OworI2VuZGlmCisgICAgQVNTRVJUKGRpZmZlcmVuY2VCZXR3ZWVuKG1fdW5pbnRlcnJ1cHRl
ZEluc3RydWN0aW9uU2VxdWVuY2VCZWdpbiwgbGFiZWwoKSkgPD0gaW5zblNwYWNlKTsKKyAgICBB
U1NFUlQoc2l6ZU9mQ29uc3RhbnRQb29sKCkgLSBtX3VuaW50ZXJydXB0ZWRDb25zdGFudFNlcXVl
bmNlQmVnaW4gPD0gY29uc3RTcGFjZSk7CisjZW5kaWYKK30KKworI2VuZGlmCisKKyNpZiBDUFUo
QVJNKQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpwcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRl
ckNhbGwoUmVnaXN0ZXJJRCByZWcpCit7CisgICAgbW92ZShsaW5rUmVnaXN0ZXIsIHJlZyk7Cit9
CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0
dXJuKFJlZ2lzdGVySUQgcmVnKQoreworICAgIG1vdmUocmVnLCBsaW5rUmVnaXN0ZXIpOworfQor
CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpyZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVy
bihBZGRyZXNzIGFkZHJlc3MpCit7CisgICAgbG9hZFB0cihhZGRyZXNzLCBsaW5rUmVnaXN0ZXIp
OworfQorI2VsaWYgQ1BVKFNINCkKKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6cHJlc2VydmVS
ZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKFJlZ2lzdGVySUQgcmVnKQoreworICAgIG1fYXNzZW1ibGVy
LnN0c3ByKHJlZyk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnJlc3RvcmVSZXR1cm5B
ZGRyZXNzQmVmb3JlUmV0dXJuKFJlZ2lzdGVySUQgcmVnKQoreworICAgIG1fYXNzZW1ibGVyLmxk
c3ByKHJlZyk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnJlc3RvcmVSZXR1cm5BZGRy
ZXNzQmVmb3JlUmV0dXJuKEFkZHJlc3MgYWRkcmVzcykKK3sKKyAgICBsb2FkUHRyTGlua1JlZyhh
ZGRyZXNzKTsKK30KKworI2VsaWYgQ1BVKE1JUFMpCisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6
OnByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChSZWdpc3RlcklEIHJlZykKK3sKKyAgICBt
b3ZlKHJldHVybkFkZHJlc3NSZWdpc3RlciwgcmVnKTsKK30KKworQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6cmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4oUmVnaXN0ZXJJRCByZWcpCit7
CisgICAgbW92ZShyZWcsIHJldHVybkFkZHJlc3NSZWdpc3Rlcik7Cit9CisKK0FMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKEFkZHJlc3MgYWRk
cmVzcykKK3sKKyAgICBsb2FkUHRyKGFkZHJlc3MsIHJldHVybkFkZHJlc3NSZWdpc3Rlcik7Cit9
CisKKyNlbHNlIC8vIENQVShYODYpIHx8IENQVShYODZfNjQpCisKK0FMV0FZU19JTkxJTkUgdm9p
ZCBKSVQ6OnByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChSZWdpc3RlcklEIHJlZykKK3sK
KyAgICBwb3AocmVnKTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6cmVzdG9yZVJldHVy
bkFkZHJlc3NCZWZvcmVSZXR1cm4oUmVnaXN0ZXJJRCByZWcpCit7CisgICAgcHVzaChyZWcpOwor
fQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpyZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJl
dHVybihBZGRyZXNzIGFkZHJlc3MpCit7CisgICAgcHVzaChhZGRyZXNzKTsKK30KKworI2VuZGlm
CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnJlc3RvcmVBcmd1bWVudFJlZmVyZW5jZSgpCit7
CisgICAgbW92ZShzdGFja1BvaW50ZXJSZWdpc3RlciwgZmlyc3RBcmd1bWVudFJlZ2lzdGVyKTsK
KyAgICBwb2tlKGNhbGxGcmFtZVJlZ2lzdGVyLCBPQkpFQ1RfT0ZGU0VUT0Yoc3RydWN0IEpJVFN0
YWNrRnJhbWUsIGNhbGxGcmFtZSkgLyBzaXplb2Yodm9pZCopKTsKK30KKworQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6dXBkYXRlVG9wQ2FsbEZyYW1lKCkKK3sKKyAgICBBU1NFUlQoc3RhdGljX2Nh
c3Q8aW50PihtX2J5dGVjb2RlT2Zmc2V0KSA+PSAwKTsKKyAgICBpZiAobV9ieXRlY29kZU9mZnNl
dCkgeworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2luKCkgKyBtX2J5dGVjb2RlT2Zmc2V0
ICsgMSksIGludFRhZ0ZvcihKU1N0YWNrOjpBcmd1bWVudENvdW50KSk7CisjZWxzZQorICAgICAg
ICBzdG9yZTMyKFRydXN0ZWRJbW0zMihtX2J5dGVjb2RlT2Zmc2V0ICsgMSksIGludFRhZ0ZvcihK
U1N0YWNrOjpBcmd1bWVudENvdW50KSk7CisjZW5kaWYKKyAgICB9CisgICAgc3RvcmVQdHIoY2Fs
bEZyYW1lUmVnaXN0ZXIsICZtX2dsb2JhbERhdGEtPnRvcENhbGxGcmFtZSk7Cit9CisKK0FMV0FZ
U19JTkxJTkUgdm9pZCBKSVQ6OnJlc3RvcmVBcmd1bWVudFJlZmVyZW5jZUZvclRyYW1wb2xpbmUo
KQoreworI2lmIENQVShYODYpCisgICAgLy8gV2l0aGluIGEgdHJhbXBvbGluZSB0aGUgcmV0dXJu
IGFkZHJlc3Mgd2lsbCBiZSBvbiB0aGUgc3RhY2sgYXQgdGhpcyBwb2ludC4KKyAgICBhZGRQdHIo
VHJ1c3RlZEltbTMyKHNpemVvZih2b2lkKikpLCBzdGFja1BvaW50ZXJSZWdpc3RlciwgZmlyc3RB
cmd1bWVudFJlZ2lzdGVyKTsKKyNlbGlmIENQVShBUk0pCisgICAgbW92ZShzdGFja1BvaW50ZXJS
ZWdpc3RlciwgZmlyc3RBcmd1bWVudFJlZ2lzdGVyKTsKKyNlbGlmIENQVShTSDQpCisgICAgbW92
ZShzdGFja1BvaW50ZXJSZWdpc3RlciwgZmlyc3RBcmd1bWVudFJlZ2lzdGVyKTsKKyNlbmRpZgor
ICAgIC8vIEluIHRoZSB0cmFtcG9saW5lIG9uIHg4Ni02NCwgdGhlIGZpcnN0IGFyZ3VtZW50IHJl
Z2lzdGVyIGlzIG5vdCBvdmVyd3JpdHRlbi4KK30KKworQUxXQVlTX0lOTElORSBKSVQ6Okp1bXAg
SklUOjpjaGVja1N0cnVjdHVyZShSZWdpc3RlcklEIHJlZywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
Cit7CisgICAgcmV0dXJuIGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWcsIEpTQ2VsbDo6
c3RydWN0dXJlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSkpOworfQorCitBTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjpsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBpbnQgdlJlZykKK3sKKyAgICBpZiAoIW1fY29kZUJs
b2NrLT5pc0tub3duTm90SW1tZWRpYXRlKHZSZWcpKQorICAgICAgICBsaW5rU2xvd0Nhc2UoaXRl
cik7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNsb3dDYXNlKEp1bXAganVtcCkK
K3sKKyAgICBBU1NFUlQobV9ieXRlY29kZU9mZnNldCAhPSAodW5zaWduZWQpLTEpOyAvLyBUaGlz
IG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJh
dGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlT2Zmc2V0IGlzIHNldC4KKworICAgIG1fc2xvd0Nhc2Vz
LmFwcGVuZChTbG93Q2FzZUVudHJ5KGp1bXAsIG1fYnl0ZWNvZGVPZmZzZXQpKTsKK30KKworQUxX
QVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xvd0Nhc2UoSnVtcExpc3QganVtcExpc3QpCit7Cisg
ICAgQVNTRVJUKG1fYnl0ZWNvZGVPZmZzZXQgIT0gKHVuc2lnbmVkKS0xKTsgLy8gVGhpcyBtZXRo
b2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24s
IHNvIHRoYXQgbV9ieXRlY29kZU9mZnNldCBpcyBzZXQuCisKKyAgICBjb25zdCBKdW1wTGlzdDo6
SnVtcFZlY3RvciYganVtcFZlY3RvciA9IGp1bXBMaXN0Lmp1bXBzKCk7CisgICAgc2l6ZV90IHNp
emUgPSBqdW1wVmVjdG9yLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7
ICsraSkKKyAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoanVtcFZlY3Rv
cltpXSwgbV9ieXRlY29kZU9mZnNldCkpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjph
ZGRTbG93Q2FzZSgpCit7CisgICAgQVNTRVJUKG1fYnl0ZWNvZGVPZmZzZXQgIT0gKHVuc2lnbmVk
KS0xKTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29s
ZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZU9mZnNldCBpcyBzZXQuCisgICAg
CisgICAgSnVtcCBlbXB0eUp1bXA7IC8vIERvaW5nIGl0IHRoaXMgd2F5IHRvIG1ha2UgV2luZG93
cyBoYXBweS4KKyAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShlbXB0eUp1bXAs
IG1fYnl0ZWNvZGVPZmZzZXQpKTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkSnVt
cChKdW1wIGp1bXAsIGludCByZWxhdGl2ZU9mZnNldCkKK3sKKyAgICBBU1NFUlQobV9ieXRlY29k
ZU9mZnNldCAhPSAodW5zaWduZWQpLTEpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBj
YWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2Rl
T2Zmc2V0IGlzIHNldC4KKworICAgIG1fam1wVGFibGUuYXBwZW5kKEp1bXBUYWJsZShqdW1wLCBt
X2J5dGVjb2RlT2Zmc2V0ICsgcmVsYXRpdmVPZmZzZXQpKTsKK30KKworQUxXQVlTX0lOTElORSB2
b2lkIEpJVDo6ZW1pdEp1bXBTbG93VG9Ib3QoSnVtcCBqdW1wLCBpbnQgcmVsYXRpdmVPZmZzZXQp
Cit7CisgICAgQVNTRVJUKG1fYnl0ZWNvZGVPZmZzZXQgIT0gKHVuc2lnbmVkKS0xKTsgLy8gVGhp
cyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVy
YXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZU9mZnNldCBpcyBzZXQuCisKKyAgICBqdW1wLmxpbmtU
byhtX2xhYmVsc1ttX2J5dGVjb2RlT2Zmc2V0ICsgcmVsYXRpdmVPZmZzZXRdLCB0aGlzKTsKK30K
KworQUxXQVlTX0lOTElORSBKSVQ6Okp1bXAgSklUOjplbWl0SnVtcElmTm90T2JqZWN0KFJlZ2lz
dGVySUQgc3RydWN0dXJlUmVnKQoreworICAgIHJldHVybiBicmFuY2g4KEJlbG93LCBBZGRyZXNz
KHN0cnVjdHVyZVJlZywgU3RydWN0dXJlOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJ
bW0zMihPYmplY3RUeXBlKSk7Cit9CisKK0FMV0FZU19JTkxJTkUgSklUOjpKdW1wIEpJVDo6ZW1p
dEp1bXBJZk5vdFR5cGUoUmVnaXN0ZXJJRCBiYXNlUmVnLCBSZWdpc3RlcklEIHNjcmF0Y2hSZWcs
IEpTVHlwZSB0eXBlKQoreworICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlUmVnLCBKU0NlbGw6OnN0
cnVjdHVyZU9mZnNldCgpKSwgc2NyYXRjaFJlZyk7CisgICAgcmV0dXJuIGJyYW5jaDgoTm90RXF1
YWwsIEFkZHJlc3Moc2NyYXRjaFJlZywgU3RydWN0dXJlOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSks
IFRydXN0ZWRJbW0zMih0eXBlKSk7Cit9CisKKyNpZiBFTkFCTEUoU0FNUExJTkdfRkxBR1MpCitB
TFdBWVNfSU5MSU5FIHZvaWQgSklUOjpzZXRTYW1wbGluZ0ZsYWcoaW50MzJfdCBmbGFnKQorewor
ICAgIEFTU0VSVChmbGFnID49IDEpOworICAgIEFTU0VSVChmbGFnIDw9IDMyKTsKKyAgICBvcjMy
KFRydXN0ZWRJbW0zMigxdSA8PCAoZmxhZyAtIDEpKSwgQWJzb2x1dGVBZGRyZXNzKFNhbXBsaW5n
RmxhZ3M6OmFkZHJlc3NPZkZsYWdzKCkpKTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6
Y2xlYXJTYW1wbGluZ0ZsYWcoaW50MzJfdCBmbGFnKQoreworICAgIEFTU0VSVChmbGFnID49IDEp
OworICAgIEFTU0VSVChmbGFnIDw9IDMyKTsKKyAgICBhbmQzMihUcnVzdGVkSW1tMzIofigxdSA8
PCAoZmxhZyAtIDEpKSksIEFic29sdXRlQWRkcmVzcyhTYW1wbGluZ0ZsYWdzOjphZGRyZXNzT2ZG
bGFncygpKSk7Cit9CisjZW5kaWYKKworI2lmIEVOQUJMRShTQU1QTElOR19DT1VOVEVSUykKK0FM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRDb3VudChBYnN0cmFjdFNhbXBsaW5nQ291bnRlciYg
Y291bnRlciwgaW50MzJfdCBjb3VudCkKK3sKKyAgICBhZGQ2NChUcnVzdGVkSW1tMzIoY291bnQp
LCBBYnNvbHV0ZUFkZHJlc3MoY291bnRlci5hZGRyZXNzT2ZDb3VudGVyKCkpKTsKK30KKyNlbmRp
ZgorCisjaWYgRU5BQkxFKE9QQ09ERV9TQU1QTElORykKKyNpZiBDUFUoWDg2XzY0KQorQUxXQVlT
X0lOTElORSB2b2lkIEpJVDo6c2FtcGxlSW5zdHJ1Y3Rpb24oSW5zdHJ1Y3Rpb24qIGluc3RydWN0
aW9uLCBib29sIGluSG9zdEZ1bmN0aW9uKQoreworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2lu
dGVycHJldGVyLT5zYW1wbGVyKCktPnNhbXBsZVNsb3QoKSksIFg4NlJlZ2lzdGVyczo6ZWN4KTsK
KyAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKG1faW50ZXJwcmV0ZXItPnNhbXBsZXIoKS0+ZW5j
b2RlU2FtcGxlKGluc3RydWN0aW9uLCBpbkhvc3RGdW5jdGlvbikpLCBYODZSZWdpc3RlcnM6OmVj
eCk7Cit9CisjZWxzZQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6c2FtcGxlSW5zdHJ1Y3Rpb24o
SW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBib29sIGluSG9zdEZ1bmN0aW9uKQoreworICAgIHN0
b3JlUHRyKFRydXN0ZWRJbW1QdHIobV9pbnRlcnByZXRlci0+c2FtcGxlcigpLT5lbmNvZGVTYW1w
bGUoaW5zdHJ1Y3Rpb24sIGluSG9zdEZ1bmN0aW9uKSksIG1faW50ZXJwcmV0ZXItPnNhbXBsZXIo
KS0+c2FtcGxlU2xvdCgpKTsKK30KKyNlbmRpZgorI2VuZGlmCisKKyNpZiBFTkFCTEUoQ09ERUJM
T0NLX1NBTVBMSU5HKQorI2lmIENQVShYODZfNjQpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpz
YW1wbGVDb2RlQmxvY2soQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgbW92ZShUcnVzdGVk
SW1tUHRyKG1faW50ZXJwcmV0ZXItPnNhbXBsZXIoKS0+Y29kZUJsb2NrU2xvdCgpKSwgWDg2UmVn
aXN0ZXJzOjplY3gpOworICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoY29kZUJsb2NrKSwgWDg2
UmVnaXN0ZXJzOjplY3gpOworfQorI2Vsc2UKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnNhbXBs
ZUNvZGVCbG9jayhDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICBzdG9yZVB0cihUcnVzdGVk
SW1tUHRyKGNvZGVCbG9jayksIG1faW50ZXJwcmV0ZXItPnNhbXBsZXIoKS0+Y29kZUJsb2NrU2xv
dCgpKTsKK30KKyNlbmRpZgorI2VuZGlmCisKK0FMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3Bl
cmFuZENvbnN0YW50SW1tZWRpYXRlQ2hhcih1bnNpZ25lZCBzcmMpCit7CisgICAgcmV0dXJuIG1f
Y29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChzcmMpICYmIGdldENvbnN0YW50T3Bl
cmFuZChzcmMpLmlzU3RyaW5nKCkgJiYgYXNTdHJpbmcoZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYyku
YXNDZWxsKCkpLT5sZW5ndGgoKSA9PSAxOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2xhc3NU
eXBlLCBNYXJrZWRCbG9jazo6RGVzdHJ1Y3RvclR5cGUgZGVzdHJ1Y3RvclR5cGUsIHR5cGVuYW1l
IFN0cnVjdHVyZVR5cGU+IGlubGluZSB2b2lkIEpJVDo6ZW1pdEFsbG9jYXRlQmFzaWNKU09iamVj
dChTdHJ1Y3R1cmVUeXBlIHN0cnVjdHVyZSwgUmVnaXN0ZXJJRCByZXN1bHQsIFJlZ2lzdGVySUQg
c3RvcmFnZVB0cikKK3sKKyAgICBzaXplX3Qgc2l6ZSA9IENsYXNzVHlwZTo6YWxsb2NhdGlvblNp
emUoSU5MSU5FX1NUT1JBR0VfQ0FQQUNJVFkpOworICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2Nh
dG9yID0gMDsKKyAgICBpZiAoZGVzdHJ1Y3RvclR5cGUgPT0gTWFya2VkQmxvY2s6Ok5vcm1hbCkK
KyAgICAgICAgYWxsb2NhdG9yID0gJm1fZ2xvYmFsRGF0YS0+aGVhcC5hbGxvY2F0b3JGb3JPYmpl
Y3RXaXRoTm9ybWFsRGVzdHJ1Y3RvcihzaXplKTsKKyAgICBlbHNlIGlmIChkZXN0cnVjdG9yVHlw
ZSA9PSBNYXJrZWRCbG9jazo6SW1tb3J0YWxTdHJ1Y3R1cmUpCisgICAgICAgIGFsbG9jYXRvciA9
ICZtX2dsb2JhbERhdGEtPmhlYXAuYWxsb2NhdG9yRm9yT2JqZWN0V2l0aEltbW9ydGFsU3RydWN0
dXJlRGVzdHJ1Y3RvcihzaXplKTsKKyAgICBlbHNlCisgICAgICAgIGFsbG9jYXRvciA9ICZtX2ds
b2JhbERhdGEtPmhlYXAuYWxsb2NhdG9yRm9yT2JqZWN0V2l0aG91dERlc3RydWN0b3Ioc2l6ZSk7
CisgICAgbG9hZFB0cigmYWxsb2NhdG9yLT5tX2ZyZWVMaXN0LmhlYWQsIHJlc3VsdCk7CisgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihaZXJvLCByZXN1bHQpKTsKKworICAgIC8vIHJlbW92
ZSB0aGUgb2JqZWN0IGZyb20gdGhlIGZyZWUgbGlzdAorICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1
bHQpLCBzdG9yYWdlUHRyKTsKKyAgICBzdG9yZVB0cihzdG9yYWdlUHRyLCAmYWxsb2NhdG9yLT5t
X2ZyZWVMaXN0LmhlYWQpOworCisgICAgLy8gaW5pdGlhbGl6ZSB0aGUgb2JqZWN0J3Mgc3RydWN0
dXJlCisgICAgc3RvcmVQdHIoc3RydWN0dXJlLCBBZGRyZXNzKHJlc3VsdCwgSlNDZWxsOjpzdHJ1
Y3R1cmVPZmZzZXQoKSkpOworCisgICAgLy8gaW5pdGlhbGl6ZSB0aGUgb2JqZWN0J3MgcHJvcGVy
dHkgc3RvcmFnZSBwb2ludGVyCisgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cigwKSwgQWRkcmVz
cyhyZXN1bHQsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSkpOworfQorCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4gaW5saW5lIHZvaWQgSklUOjplbWl0QWxsb2NhdGVKU0ZpbmFsT2JqZWN0KFQg
c3RydWN0dXJlLCBSZWdpc3RlcklEIHJlc3VsdCwgUmVnaXN0ZXJJRCBzY3JhdGNoKQoreworICAg
IGVtaXRBbGxvY2F0ZUJhc2ljSlNPYmplY3Q8SlNGaW5hbE9iamVjdCwgTWFya2VkQmxvY2s6Ok5v
bmUsIFQ+KHN0cnVjdHVyZSwgcmVzdWx0LCBzY3JhdGNoKTsKK30KKworI2lmIEVOQUJMRShWQUxV
RV9QUk9GSUxFUikKK2lubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1
ZVByb2ZpbGUqIHZhbHVlUHJvZmlsZSkKK3sKKyAgICBBU1NFUlQoc2hvdWxkRW1pdFByb2ZpbGlu
ZygpKTsKKyAgICBBU1NFUlQodmFsdWVQcm9maWxlKTsKKworICAgIGNvbnN0IFJlZ2lzdGVySUQg
dmFsdWUgPSByZWdUMDsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIGNvbnN0IFJlZ2lzdGVy
SUQgdmFsdWVUYWcgPSByZWdUMTsKKyNlbmRpZgorICAgIGNvbnN0IFJlZ2lzdGVySUQgc2NyYXRj
aCA9IHJlZ1QzOworICAgIAorICAgIGlmIChWYWx1ZVByb2ZpbGU6Om51bWJlck9mQnVja2V0cyA9
PSAxKSB7CisgICAgICAgIC8vIFdlJ3JlIGluIGEgc2ltcGxlIGNvbmZpZ3VyYXRpb246IG9ubHkg
b25lIGJ1Y2tldCwgc28gd2UgY2FuIGp1c3QgZG8gYSBkaXJlY3QKKyAgICAgICAgLy8gc3RvcmUu
CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgc3RvcmU2NCh2YWx1ZSwgdmFsdWVQcm9maWxl
LT5tX2J1Y2tldHMpOworI2Vsc2UKKyAgICAgICAgRW5jb2RlZFZhbHVlRGVzY3JpcHRvciogZGVz
Y3JpcHRvciA9IGJpdHdpc2VfY2FzdDxFbmNvZGVkVmFsdWVEZXNjcmlwdG9yKj4odmFsdWVQcm9m
aWxlLT5tX2J1Y2tldHMpOworICAgICAgICBzdG9yZTMyKHZhbHVlLCAmZGVzY3JpcHRvci0+YXNC
aXRzLnBheWxvYWQpOworICAgICAgICBzdG9yZTMyKHZhbHVlVGFnLCAmZGVzY3JpcHRvci0+YXNC
aXRzLnRhZyk7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAo
bV9yYW5kb21HZW5lcmF0b3IuZ2V0VWludDMyKCkgJiAxKQorICAgICAgICBhZGQzMihUcnVzdGVk
SW1tMzIoMSksIGJ1Y2tldENvdW50ZXJSZWdpc3Rlcik7CisgICAgZWxzZQorICAgICAgICBhZGQz
MihUcnVzdGVkSW1tMzIoMyksIGJ1Y2tldENvdW50ZXJSZWdpc3Rlcik7CisgICAgYW5kMzIoVHJ1
c3RlZEltbTMyKFZhbHVlUHJvZmlsZTo6YnVja2V0SW5kZXhNYXNrKSwgYnVja2V0Q291bnRlclJl
Z2lzdGVyKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIodmFsdWVQcm9maWxlLT5tX2J1Y2tldHMp
LCBzY3JhdGNoKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIHN0b3JlNjQodmFsdWUsIEJhc2VJ
bmRleChzY3JhdGNoLCBidWNrZXRDb3VudGVyUmVnaXN0ZXIsIFRpbWVzRWlnaHQpKTsKKyNlbGlm
IFVTRShKU1ZBTFVFMzJfNjQpCisgICAgc3RvcmUzMih2YWx1ZSwgQmFzZUluZGV4KHNjcmF0Y2gs
IGJ1Y2tldENvdW50ZXJSZWdpc3RlciwgVGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFs
dWUsIHUuYXNCaXRzLnBheWxvYWQpKSk7CisgICAgc3RvcmUzMih2YWx1ZVRhZywgQmFzZUluZGV4
KHNjcmF0Y2gsIGJ1Y2tldENvdW50ZXJSZWdpc3RlciwgVGltZXNFaWdodCwgT0JKRUNUX09GRlNF
VE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpKTsKKyNlbmRpZgorfQorCitpbmxpbmUgdm9pZCBK
SVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpCit7Cisg
ICAgaWYgKCFzaG91bGRFbWl0UHJvZmlsaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKG1fY29kZUJsb2NrLT52YWx1ZVByb2ZpbGVGb3JCeXRlY29kZU9m
ZnNldChieXRlY29kZU9mZnNldCkpOworfQorCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoKQoreworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobV9ieXRlY29kZU9m
ZnNldCk7Cit9CisjZW5kaWYgLy8gRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQorCitpbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRBcnJheVByb2ZpbGluZ1NpdGUoUmVnaXN0ZXJJRCBzdHJ1Y3R1cmVBbmRJbmRl
eGluZ1R5cGUsIFJlZ2lzdGVySUQgc2NyYXRjaCwgQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUp
Cit7CisgICAgVU5VU0VEX1BBUkFNKHNjcmF0Y2gpOyAvLyBXZSBoYWQgZm91bmQgdGhpcyBzY3Jh
dGNoIHJlZ2lzdGVyIHVzZWZ1bCBoZXJlIGJlZm9yZSwgc28gSSB3aWxsIGtlZXAgaXQgZm9yIG5v
dy4KKyAgICAKKyAgICBSZWdpc3RlcklEIHN0cnVjdHVyZSA9IHN0cnVjdHVyZUFuZEluZGV4aW5n
VHlwZTsKKyAgICBSZWdpc3RlcklEIGluZGV4aW5nVHlwZSA9IHN0cnVjdHVyZUFuZEluZGV4aW5n
VHlwZTsKKyAgICAKKyAgICBpZiAoY2FuQmVPcHRpbWl6ZWQoKSkKKyAgICAgICAgc3RvcmVQdHIo
c3RydWN0dXJlLCBhcnJheVByb2ZpbGUtPmFkZHJlc3NPZkxhc3RTZWVuU3RydWN0dXJlKCkpOwor
CisgICAgbG9hZDgoQWRkcmVzcyhzdHJ1Y3R1cmUsIFN0cnVjdHVyZTo6aW5kZXhpbmdUeXBlT2Zm
c2V0KCkpLCBpbmRleGluZ1R5cGUpOworfQorCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBcnJheVBy
b2ZpbGluZ1NpdGVGb3JCeXRlY29kZUluZGV4KFJlZ2lzdGVySUQgc3RydWN0dXJlQW5kSW5kZXhp
bmdUeXBlLCBSZWdpc3RlcklEIHNjcmF0Y2gsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCit7Cisj
aWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQorICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGUoc3Ry
dWN0dXJlQW5kSW5kZXhpbmdUeXBlLCBzY3JhdGNoLCBtX2NvZGVCbG9jay0+Z2V0T3JBZGRBcnJh
eVByb2ZpbGUoYnl0ZWNvZGVJbmRleCkpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oYnl0ZWNv
ZGVJbmRleCk7CisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZShzdHJ1Y3R1cmVBbmRJbmRleGlu
Z1R5cGUsIHNjcmF0Y2gsIDApOworI2VuZGlmCit9CisKK2lubGluZSB2b2lkIEpJVDo6ZW1pdEFy
cmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2UoQXJyYXlQcm9maWxlKiBhcnJheVByb2Zp
bGUpCit7CisjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKSAgICAKKyAgICBzdG9yZTgoVHJ1c3Rl
ZEltbTMyKDEpLCBhcnJheVByb2ZpbGUtPmFkZHJlc3NPZk1heVN0b3JlVG9Ib2xlKCkpOworI2Vs
c2UKKyAgICBVTlVTRURfUEFSQU0oYXJyYXlQcm9maWxlKTsKKyNlbmRpZgorfQorCitzdGF0aWMg
aW5saW5lIGJvb2wgYXJyYXlQcm9maWxlU2F3KEFycmF5TW9kZXMgYXJyYXlNb2RlcywgSW5kZXhp
bmdUeXBlIGNhcGFiaWxpdHkpCit7CisjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQorICAgIHJl
dHVybiBhcnJheU1vZGVzSW5jbHVkZShhcnJheU1vZGVzLCBjYXBhYmlsaXR5KTsKKyNlbHNlCisg
ICAgVU5VU0VEX1BBUkFNKGFycmF5TW9kZXMpOworICAgIFVOVVNFRF9QQVJBTShjYXBhYmlsaXR5
KTsKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKworaW5saW5lIEpJVEFycmF5TW9kZSBK
SVQ6OmNob29zZUFycmF5TW9kZShBcnJheVByb2ZpbGUqIHByb2ZpbGUpCit7CisgICAgcHJvZmls
ZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKG1fY29kZUJsb2NrKTsKKyAgICBBcnJheU1vZGVz
IGFycmF5TW9kZXMgPSBwcm9maWxlLT5vYnNlcnZlZEFycmF5TW9kZXMoKTsKKyAgICBpZiAoYXJy
YXlQcm9maWxlU2F3KGFycmF5TW9kZXMsIERvdWJsZVNoYXBlKSkKKyAgICAgICAgcmV0dXJuIEpJ
VERvdWJsZTsKKyAgICBpZiAoYXJyYXlQcm9maWxlU2F3KGFycmF5TW9kZXMsIEludDMyU2hhcGUp
KQorICAgICAgICByZXR1cm4gSklUSW50MzI7CisgICAgaWYgKGFycmF5UHJvZmlsZVNhdyhhcnJh
eU1vZGVzLCBBcnJheVN0b3JhZ2VTaGFwZSkpCisgICAgICAgIHJldHVybiBKSVRBcnJheVN0b3Jh
Z2U7CisgICAgcmV0dXJuIEpJVENvbnRpZ3VvdXM7Cit9CisKKyNpZiBVU0UoSlNWQUxVRTMyXzY0
KQorCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkVGFnKGludCBpbmRleCwgUmVnaXN0ZXJJRCB0
YWcpCit7CisgICAgUmVnaXN0ZXJJRCBtYXBwZWRUYWc7CisgICAgaWYgKGdldE1hcHBlZFRhZyhp
bmRleCwgbWFwcGVkVGFnKSkgeworICAgICAgICBtb3ZlKG1hcHBlZFRhZywgdGFnKTsKKyAgICAg
ICAgdW5tYXAodGFnKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX2NvZGVC
bG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW5kZXgpKSB7CisgICAgICAgIG1vdmUoSW1t
MzIoZ2V0Q29uc3RhbnRPcGVyYW5kKGluZGV4KS50YWcoKSksIHRhZyk7CisgICAgICAgIHVubWFw
KHRhZyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBsb2FkMzIodGFnRm9yKGluZGV4
KSwgdGFnKTsKKyAgICB1bm1hcCh0YWcpOworfQorCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2Fk
UGF5bG9hZChpbnQgaW5kZXgsIFJlZ2lzdGVySUQgcGF5bG9hZCkKK3sKKyAgICBSZWdpc3RlcklE
IG1hcHBlZFBheWxvYWQ7CisgICAgaWYgKGdldE1hcHBlZFBheWxvYWQoaW5kZXgsIG1hcHBlZFBh
eWxvYWQpKSB7CisgICAgICAgIG1vdmUobWFwcGVkUGF5bG9hZCwgcGF5bG9hZCk7CisgICAgICAg
IHVubWFwKHBheWxvYWQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1fY29k
ZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbmRleCkpIHsKKyAgICAgICAgbW92ZShJ
bW0zMihnZXRDb25zdGFudE9wZXJhbmQoaW5kZXgpLnBheWxvYWQoKSksIHBheWxvYWQpOworICAg
ICAgICB1bm1hcChwYXlsb2FkKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGxvYWQz
MihwYXlsb2FkRm9yKGluZGV4KSwgcGF5bG9hZCk7CisgICAgdW5tYXAocGF5bG9hZCk7Cit9CisK
K2lubGluZSB2b2lkIEpJVDo6ZW1pdExvYWQoY29uc3QgSlNWYWx1ZSYgdiwgUmVnaXN0ZXJJRCB0
YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCkKK3sKKyAgICBtb3ZlKEltbTMyKHYucGF5bG9hZCgpKSwg
cGF5bG9hZCk7CisgICAgbW92ZShJbW0zMih2LnRhZygpKSwgdGFnKTsKK30KKworaW5saW5lIHZv
aWQgSklUOjplbWl0TG9hZChpbnQgaW5kZXgsIFJlZ2lzdGVySUQgdGFnLCBSZWdpc3RlcklEIHBh
eWxvYWQsIFJlZ2lzdGVySUQgYmFzZSkKK3sKKyAgICBBU1NFUlQodGFnICE9IHBheWxvYWQpOwor
CisgICAgaWYgKGJhc2UgPT0gY2FsbEZyYW1lUmVnaXN0ZXIpIHsKKyAgICAgICAgQVNTRVJUKHBh
eWxvYWQgIT0gYmFzZSk7CisgICAgICAgIGVtaXRMb2FkUGF5bG9hZChpbmRleCwgcGF5bG9hZCk7
CisgICAgICAgIGVtaXRMb2FkVGFnKGluZGV4LCB0YWcpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaWYgKHBheWxvYWQgPT0gYmFzZSkgeyAvLyBhdm9pZCBzdG9tcGluZyBiYXNlCisg
ICAgICAgIGxvYWQzMih0YWdGb3IoaW5kZXgsIGJhc2UpLCB0YWcpOworICAgICAgICBsb2FkMzIo
cGF5bG9hZEZvcihpbmRleCwgYmFzZSksIHBheWxvYWQpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgbG9hZDMyKHBheWxvYWRGb3IoaW5kZXgsIGJhc2UpLCBwYXlsb2FkKTsKKyAgICBs
b2FkMzIodGFnRm9yKGluZGV4LCBiYXNlKSwgdGFnKTsKK30KKworaW5saW5lIHZvaWQgSklUOjpl
bWl0TG9hZDIoaW50IGluZGV4MSwgUmVnaXN0ZXJJRCB0YWcxLCBSZWdpc3RlcklEIHBheWxvYWQx
LCBpbnQgaW5kZXgyLCBSZWdpc3RlcklEIHRhZzIsIFJlZ2lzdGVySUQgcGF5bG9hZDIpCit7Cisg
ICAgaWYgKGlzTWFwcGVkKGluZGV4MSkpIHsKKyAgICAgICAgZW1pdExvYWQoaW5kZXgxLCB0YWcx
LCBwYXlsb2FkMSk7CisgICAgICAgIGVtaXRMb2FkKGluZGV4MiwgdGFnMiwgcGF5bG9hZDIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIGVtaXRMb2FkKGluZGV4MiwgdGFnMiwgcGF5bG9h
ZDIpOworICAgIGVtaXRMb2FkKGluZGV4MSwgdGFnMSwgcGF5bG9hZDEpOworfQorCitpbmxpbmUg
dm9pZCBKSVQ6OmVtaXRMb2FkRG91YmxlKGludCBpbmRleCwgRlBSZWdpc3RlcklEIHZhbHVlKQor
eworICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW5kZXgpKSB7
CisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wgPSBtX2NvZGVC
bG9jay0+Y29uc3RhbnRSZWdpc3RlcihpbmRleCk7CisgICAgICAgIGxvYWREb3VibGUoJmluQ29u
c3RhbnRQb29sLCB2YWx1ZSk7CisgICAgfSBlbHNlCisgICAgICAgIGxvYWREb3VibGUoYWRkcmVz
c0ZvcihpbmRleCksIHZhbHVlKTsKK30KKworaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZEludDMy
VG9Eb3VibGUoaW50IGluZGV4LCBGUFJlZ2lzdGVySUQgdmFsdWUpCit7CisgICAgaWYgKG1fY29k
ZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbmRleCkpIHsKKyAgICAgICAgV3JpdGVC
YXJyaWVyPFVua25vd24+JiBpbkNvbnN0YW50UG9vbCA9IG1fY29kZUJsb2NrLT5jb25zdGFudFJl
Z2lzdGVyKGluZGV4KTsKKyAgICAgICAgY2hhciogYnl0ZVBvaW50ZXIgPSByZWludGVycHJldF9j
YXN0PGNoYXIqPigmaW5Db25zdGFudFBvb2wpOworICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJs
ZShBYnNvbHV0ZUFkZHJlc3MoYnl0ZVBvaW50ZXIgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwg
dS5hc0JpdHMucGF5bG9hZCkpLCB2YWx1ZSk7CisgICAgfSBlbHNlCisgICAgICAgIGNvbnZlcnRJ
bnQzMlRvRG91YmxlKHBheWxvYWRGb3IoaW5kZXgpLCB2YWx1ZSk7Cit9CisKK2lubGluZSB2b2lk
IEpJVDo6ZW1pdFN0b3JlKGludCBpbmRleCwgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5
bG9hZCwgUmVnaXN0ZXJJRCBiYXNlKQoreworICAgIHN0b3JlMzIocGF5bG9hZCwgcGF5bG9hZEZv
cihpbmRleCwgYmFzZSkpOworICAgIHN0b3JlMzIodGFnLCB0YWdGb3IoaW5kZXgsIGJhc2UpKTsK
K30KKworaW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmVJbnQzMihpbnQgaW5kZXgsIFJlZ2lzdGVy
SUQgcGF5bG9hZCwgYm9vbCBpbmRleElzSW50MzIpCit7CisgICAgc3RvcmUzMihwYXlsb2FkLCBw
YXlsb2FkRm9yKGluZGV4LCBjYWxsRnJhbWVSZWdpc3RlcikpOworICAgIGlmICghaW5kZXhJc0lu
dDMyKQorICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHRh
Z0ZvcihpbmRleCwgY2FsbEZyYW1lUmVnaXN0ZXIpKTsKK30KKworaW5saW5lIHZvaWQgSklUOjpl
bWl0U3RvcmVBbmRNYXBJbnQzMihpbnQgaW5kZXgsIFJlZ2lzdGVySUQgdGFnLCBSZWdpc3RlcklE
IHBheWxvYWQsIGJvb2wgaW5kZXhJc0ludDMyLCBzaXplX3Qgb3Bjb2RlTGVuZ3RoKQoreworICAg
IGVtaXRTdG9yZUludDMyKGluZGV4LCBwYXlsb2FkLCBpbmRleElzSW50MzIpOworICAgIG1hcCht
X2J5dGVjb2RlT2Zmc2V0ICsgb3Bjb2RlTGVuZ3RoLCBpbmRleCwgdGFnLCBwYXlsb2FkKTsKK30K
KworaW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmVJbnQzMihpbnQgaW5kZXgsIFRydXN0ZWRJbW0z
MiBwYXlsb2FkLCBib29sIGluZGV4SXNJbnQzMikKK3sKKyAgICBzdG9yZTMyKHBheWxvYWQsIHBh
eWxvYWRGb3IoaW5kZXgsIGNhbGxGcmFtZVJlZ2lzdGVyKSk7CisgICAgaWYgKCFpbmRleElzSW50
MzIpCisgICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgdGFn
Rm9yKGluZGV4LCBjYWxsRnJhbWVSZWdpc3RlcikpOworfQorCitpbmxpbmUgdm9pZCBKSVQ6OmVt
aXRTdG9yZUNlbGwoaW50IGluZGV4LCBSZWdpc3RlcklEIHBheWxvYWQsIGJvb2wgaW5kZXhJc0Nl
bGwpCit7CisgICAgc3RvcmUzMihwYXlsb2FkLCBwYXlsb2FkRm9yKGluZGV4LCBjYWxsRnJhbWVS
ZWdpc3RlcikpOworICAgIGlmICghaW5kZXhJc0NlbGwpCisgICAgICAgIHN0b3JlMzIoVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCB0YWdGb3IoaW5kZXgsIGNhbGxGcmFtZVJlZ2lzdGVy
KSk7Cit9CisKK2lubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlQm9vbChpbnQgaW5kZXgsIFJlZ2lz
dGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzQm9vbCkKK3sKKyAgICBzdG9yZTMyKHBheWxvYWQs
IHBheWxvYWRGb3IoaW5kZXgsIGNhbGxGcmFtZVJlZ2lzdGVyKSk7CisgICAgaWYgKCFpbmRleElz
Qm9vbCkKKyAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qm9vbGVhblRhZyks
IHRhZ0ZvcihpbmRleCwgY2FsbEZyYW1lUmVnaXN0ZXIpKTsKK30KKworaW5saW5lIHZvaWQgSklU
OjplbWl0U3RvcmVEb3VibGUoaW50IGluZGV4LCBGUFJlZ2lzdGVySUQgdmFsdWUpCit7CisgICAg
c3RvcmVEb3VibGUodmFsdWUsIGFkZHJlc3NGb3IoaW5kZXgpKTsKK30KKworaW5saW5lIHZvaWQg
SklUOjplbWl0U3RvcmUoaW50IGluZGV4LCBjb25zdCBKU1ZhbHVlIGNvbnN0YW50LCBSZWdpc3Rl
cklEIGJhc2UpCit7CisgICAgc3RvcmUzMihJbW0zMihjb25zdGFudC5wYXlsb2FkKCkpLCBwYXls
b2FkRm9yKGluZGV4LCBiYXNlKSk7CisgICAgc3RvcmUzMihJbW0zMihjb25zdGFudC50YWcoKSks
IHRhZ0ZvcihpbmRleCwgYmFzZSkpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0
SW5pdFJlZ2lzdGVyKHVuc2lnbmVkIGRzdCkKK3sKKyAgICBlbWl0U3RvcmUoZHN0LCBqc1VuZGVm
aW5lZCgpKTsKK30KKworaW5saW5lIGJvb2wgSklUOjppc0xhYmVsZWQodW5zaWduZWQgYnl0ZWNv
ZGVPZmZzZXQpCit7CisgICAgZm9yIChzaXplX3QgbnVtYmVyT2ZKdW1wVGFyZ2V0cyA9IG1fY29k
ZUJsb2NrLT5udW1iZXJPZkp1bXBUYXJnZXRzKCk7IG1fanVtcFRhcmdldEluZGV4ICE9IG51bWJl
ck9mSnVtcFRhcmdldHM7ICsrbV9qdW1wVGFyZ2V0SW5kZXgpIHsKKyAgICAgICAgdW5zaWduZWQg
anVtcFRhcmdldCA9IG1fY29kZUJsb2NrLT5qdW1wVGFyZ2V0KG1fanVtcFRhcmdldEluZGV4KTsK
KyAgICAgICAgaWYgKGp1bXBUYXJnZXQgPT0gYnl0ZWNvZGVPZmZzZXQpCisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKGp1bXBUYXJnZXQgPiBieXRlY29kZU9mZnNldCkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitp
bmxpbmUgdm9pZCBKSVQ6Om1hcCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgaW50IHZpcnR1YWxS
ZWdpc3RlckluZGV4LCBSZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJRCBwYXlsb2FkKQoreworICAg
IGlmIChpc0xhYmVsZWQoYnl0ZWNvZGVPZmZzZXQpKQorICAgICAgICByZXR1cm47CisKKyAgICBt
X21hcHBlZEJ5dGVjb2RlT2Zmc2V0ID0gYnl0ZWNvZGVPZmZzZXQ7CisgICAgbV9tYXBwZWRWaXJ0
dWFsUmVnaXN0ZXJJbmRleCA9IHZpcnR1YWxSZWdpc3RlckluZGV4OworICAgIG1fbWFwcGVkVGFn
ID0gdGFnOworICAgIG1fbWFwcGVkUGF5bG9hZCA9IHBheWxvYWQ7CisgICAgCisgICAgQVNTRVJU
KCFjYW5CZU9wdGltaXplZCgpIHx8IG1fbWFwcGVkUGF5bG9hZCA9PSByZWdUMCk7CisgICAgQVNT
RVJUKCFjYW5CZU9wdGltaXplZCgpIHx8IG1fbWFwcGVkVGFnID09IHJlZ1QxKTsKK30KKworaW5s
aW5lIHZvaWQgSklUOjp1bm1hcChSZWdpc3RlcklEIHJlZ2lzdGVySUQpCit7CisgICAgaWYgKG1f
bWFwcGVkVGFnID09IHJlZ2lzdGVySUQpCisgICAgICAgIG1fbWFwcGVkVGFnID0gKFJlZ2lzdGVy
SUQpLTE7CisgICAgZWxzZSBpZiAobV9tYXBwZWRQYXlsb2FkID09IHJlZ2lzdGVySUQpCisgICAg
ICAgIG1fbWFwcGVkUGF5bG9hZCA9IChSZWdpc3RlcklEKS0xOworfQorCitpbmxpbmUgdm9pZCBK
SVQ6OnVubWFwKCkKK3sKKyAgICBtX21hcHBlZEJ5dGVjb2RlT2Zmc2V0ID0gKHVuc2lnbmVkKS0x
OworICAgIG1fbWFwcGVkVmlydHVhbFJlZ2lzdGVySW5kZXggPSBKU1N0YWNrOjpSZXR1cm5QQzsK
KyAgICBtX21hcHBlZFRhZyA9IChSZWdpc3RlcklEKS0xOworICAgIG1fbWFwcGVkUGF5bG9hZCA9
IChSZWdpc3RlcklEKS0xOworfQorCitpbmxpbmUgYm9vbCBKSVQ6OmlzTWFwcGVkKGludCB2aXJ0
dWFsUmVnaXN0ZXJJbmRleCkKK3sKKyAgICBpZiAobV9tYXBwZWRCeXRlY29kZU9mZnNldCAhPSBt
X2J5dGVjb2RlT2Zmc2V0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fbWFwcGVk
VmlydHVhbFJlZ2lzdGVySW5kZXggIT0gdmlydHVhbFJlZ2lzdGVySW5kZXgpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworaW5saW5lIGJvb2wgSklUOjpnZXRN
YXBwZWRQYXlsb2FkKGludCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCwgUmVnaXN0ZXJJRCYgcGF5bG9h
ZCkKK3sKKyAgICBpZiAobV9tYXBwZWRCeXRlY29kZU9mZnNldCAhPSBtX2J5dGVjb2RlT2Zmc2V0
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fbWFwcGVkVmlydHVhbFJlZ2lzdGVy
SW5kZXggIT0gdmlydHVhbFJlZ2lzdGVySW5kZXgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBpZiAobV9tYXBwZWRQYXlsb2FkID09IChSZWdpc3RlcklEKS0xKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgcGF5bG9hZCA9IG1fbWFwcGVkUGF5bG9hZDsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworaW5saW5lIGJvb2wgSklUOjpnZXRNYXBwZWRUYWcoaW50IHZpcnR1YWxSZWdpc3Rlcklu
ZGV4LCBSZWdpc3RlcklEJiB0YWcpCit7CisgICAgaWYgKG1fbWFwcGVkQnl0ZWNvZGVPZmZzZXQg
IT0gbV9ieXRlY29kZU9mZnNldCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX21h
cHBlZFZpcnR1YWxSZWdpc3RlckluZGV4ICE9IHZpcnR1YWxSZWdpc3RlckluZGV4KQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fbWFwcGVkVGFnID09IChSZWdpc3RlcklEKS0xKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgdGFnID0gbV9tYXBwZWRUYWc7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2lubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KGludCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCkKK3sKKyAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tu
b3duTm90SW1tZWRpYXRlKHZpcnR1YWxSZWdpc3RlckluZGV4KSkgeworICAgICAgICBpZiAobV9j
b2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHZpcnR1YWxSZWdpc3RlckluZGV4KSkK
KyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIGFkZFNsb3dDYXNlKGVtaXRKdW1wSWZOb3RKU0NlbGwodmlydHVhbFJlZ2lzdGVySW5kZXgp
KTsKKyAgICB9Cit9CisKK2lubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKGludCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCwgUmVnaXN0ZXJJRCB0YWcpCit7CisgICAgaWYg
KCFtX2NvZGVCbG9jay0+aXNLbm93bk5vdEltbWVkaWF0ZSh2aXJ0dWFsUmVnaXN0ZXJJbmRleCkp
IHsKKyAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleCh2aXJ0
dWFsUmVnaXN0ZXJJbmRleCkpCisgICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgdGFn
LCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpKTsKKyAgICB9Cit9CisKK0FMV0FZU19J
TkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50SW1tZWRpYXRlSW50KHVuc2lnbmVkIHNy
YykKK3sKKyAgICByZXR1cm4gbV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHNy
YykgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOworfQorCitBTFdBWVNfSU5M
SU5FIGJvb2wgSklUOjpnZXRPcGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVJbnQodW5zaWduZWQgb3Ax
LCB1bnNpZ25lZCBvcDIsIHVuc2lnbmVkJiBvcCwgaW50MzJfdCYgY29uc3RhbnQpCit7CisgICAg
aWYgKGlzT3BlcmFuZENvbnN0YW50SW1tZWRpYXRlSW50KG9wMSkpIHsKKyAgICAgICAgY29uc3Rh
bnQgPSBnZXRDb25zdGFudE9wZXJhbmQob3AxKS5hc0ludDMyKCk7CisgICAgICAgIG9wID0gb3Ay
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoaXNPcGVyYW5kQ29uc3Rh
bnRJbW1lZGlhdGVJbnQob3AyKSkgeworICAgICAgICBjb25zdGFudCA9IGdldENvbnN0YW50T3Bl
cmFuZChvcDIpLmFzSW50MzIoKTsKKyAgICAgICAgb3AgPSBvcDE7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKyNlbHNlIC8vIFVTRShK
U1ZBTFVFMzJfNjQpCisKKy8qIERlcHJlY2F0ZWQ6IFBsZWFzZSB1c2UgSklUU3R1YkNhbGwgaW5z
dGVhZC4gKi8KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldEpJVFN0dWJBcmcodW5z
aWduZWQgYXJndW1lbnROdW1iZXIsIFJlZ2lzdGVySUQgZHN0KQoreworICAgIHVuc2lnbmVkIGFy
Z3VtZW50U3RhY2tPZmZzZXQgPSAoYXJndW1lbnROdW1iZXIgKiAoc2l6ZW9mKEpTVmFsdWUpIC8g
c2l6ZW9mKHZvaWQqKSkpICsgSklUU1RBQ0tGUkFNRV9BUkdTX0lOREVYOworICAgIHBlZWs2NChk
c3QsIGFyZ3VtZW50U3RhY2tPZmZzZXQpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpr
aWxsTGFzdFJlc3VsdFJlZ2lzdGVyKCkKK3sKKyAgICBtX2xhc3RSZXN1bHRCeXRlY29kZVJlZ2lz
dGVyID0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKTsKK30KKworLy8gZ2V0IGFyZyBw
dXRzIGFuIGFyZyBmcm9tIHRoZSBTRiByZWdpc3RlciBhcnJheSBpbnRvIGEgaC93IHJlZ2lzdGVy
CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGludCBzcmMs
IFJlZ2lzdGVySUQgZHN0KQoreworICAgIEFTU0VSVChtX2J5dGVjb2RlT2Zmc2V0ICE9ICh1bnNp
Z25lZCktMSk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90
L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVPZmZzZXQgaXMgc2V0Lgor
CisgICAgLy8gVE9ETzogd2Ugd2FudCB0byByZXVzZSB2YWx1ZXMgdGhhdCBhcmUgYWxyZWFkeSBp
biByZWdpc3RlcnMgaWYgd2UgY2FuIC0gYWRkIGEgcmVnaXN0ZXIgYWxsb2NhdG9yIQorICAgIGlm
IChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoc3JjKSkgeworICAgICAgICBK
U1ZhbHVlIHZhbHVlID0gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CisgICAgICAgIGlm
ICghdmFsdWUuaXNOdW1iZXIoKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFs
dWU6OmVuY29kZSh2YWx1ZSkpLCBkc3QpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtb3Zl
KEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBkc3QpOworICAgICAgICBraWxsTGFzdFJl
c3VsdFJlZ2lzdGVyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoc3JjID09
IG1fbGFzdFJlc3VsdEJ5dGVjb2RlUmVnaXN0ZXIgJiYgbV9jb2RlQmxvY2stPmlzVGVtcG9yYXJ5
UmVnaXN0ZXJJbmRleChzcmMpICYmICFhdEp1bXBUYXJnZXQoKSkgeworICAgICAgICAvLyBUaGUg
YXJndW1lbnQgd2Ugd2FudCBpcyBhbHJlYWR5IHN0b3JlZCBpbiBlYXgKKyAgICAgICAgaWYgKGRz
dCAhPSBjYWNoZWRSZXN1bHRSZWdpc3RlcikKKyAgICAgICAgICAgIG1vdmUoY2FjaGVkUmVzdWx0
UmVnaXN0ZXIsIGRzdCk7CisgICAgICAgIGtpbGxMYXN0UmVzdWx0UmVnaXN0ZXIoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGxvYWQ2NChBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVy
LCBzcmMgKiBzaXplb2YoUmVnaXN0ZXIpKSwgZHN0KTsKKyAgICBraWxsTGFzdFJlc3VsdFJlZ2lz
dGVyKCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXJzKGludCBzcmMxLCBSZWdpc3RlcklEIGRzdDEsIGludCBzcmMyLCBSZWdpc3RlcklEIGRzdDIp
Cit7CisgICAgaWYgKHNyYzIgPT0gbV9sYXN0UmVzdWx0Qnl0ZWNvZGVSZWdpc3RlcikgeworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzIsIGRzdDIpOworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNyYzEsIGRzdDEpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgZHN0MSk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc3JjMiwgZHN0Mik7CisgICAgfQorfQorCitBTFdBWVNfSU5MSU5FIGludDMyX3QgSklU
OjpnZXRDb25zdGFudE9wZXJhbmRJbW1lZGlhdGVJbnQodW5zaWduZWQgc3JjKQoreworICAgIHJl
dHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5hc0ludDMyKCk7Cit9CisKK0FMV0FZU19JTkxJ
TkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50SW1tZWRpYXRlSW50KHVuc2lnbmVkIHNyYykK
K3sKKyAgICByZXR1cm4gbV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHNyYykg
JiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOworfQorCitBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHVuc2lnbmVkIGRzdCwgUmVnaXN0ZXJJ
RCBmcm9tKQoreworICAgIHN0b3JlNjQoZnJvbSwgQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rlciwg
ZHN0ICogc2l6ZW9mKFJlZ2lzdGVyKSkpOworICAgIG1fbGFzdFJlc3VsdEJ5dGVjb2RlUmVnaXN0
ZXIgPSAoZnJvbSA9PSBjYWNoZWRSZXN1bHRSZWdpc3RlcikgPyBzdGF0aWNfY2FzdDxpbnQ+KGRz
dCkgOiBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpOworfQorCitBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjplbWl0SW5pdFJlZ2lzdGVyKHVuc2lnbmVkIGRzdCkKK3sKKyAgICBzdG9yZTY0
KFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpLCBBZGRyZXNzKGNh
bGxGcmFtZVJlZ2lzdGVyLCBkc3QgKiBzaXplb2YoUmVnaXN0ZXIpKSk7Cit9CisKK0FMV0FZU19J
TkxJTkUgSklUOjpKdW1wIEpJVDo6ZW1pdEp1bXBJZkpTQ2VsbChSZWdpc3RlcklEIHJlZykKK3sK
KyAgICByZXR1cm4gYnJhbmNoVGVzdDY0KFplcm8sIHJlZywgdGFnTWFza1JlZ2lzdGVyKTsKK30K
KworQUxXQVlTX0lOTElORSBKSVQ6Okp1bXAgSklUOjplbWl0SnVtcElmQm90aEpTQ2VsbHMoUmVn
aXN0ZXJJRCByZWcxLCBSZWdpc3RlcklEIHJlZzIsIFJlZ2lzdGVySUQgc2NyYXRjaCkKK3sKKyAg
ICBtb3ZlKHJlZzEsIHNjcmF0Y2gpOworICAgIG9yNjQocmVnMiwgc2NyYXRjaCk7CisgICAgcmV0
dXJuIGVtaXRKdW1wSWZKU0NlbGwoc2NyYXRjaCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZkpTQ2VsbChSZWdpc3RlcklEIHJlZykKK3sKKyAgICBhZGRT
bG93Q2FzZShlbWl0SnVtcElmSlNDZWxsKHJlZykpOworfQorCitBTFdBWVNfSU5MSU5FIEpJVDo6
SnVtcCBKSVQ6OmVtaXRKdW1wSWZOb3RKU0NlbGwoUmVnaXN0ZXJJRCByZWcpCit7CisgICAgcmV0
dXJuIGJyYW5jaFRlc3Q2NChOb25aZXJvLCByZWcsIHRhZ01hc2tSZWdpc3Rlcik7Cit9CisKK0FM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChSZWdpc3Rl
cklEIHJlZykKK3sKKyAgICBhZGRTbG93Q2FzZShlbWl0SnVtcElmTm90SlNDZWxsKHJlZykpOwor
fQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
UmVnaXN0ZXJJRCByZWcsIGludCB2UmVnKQoreworICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25v
d25Ob3RJbW1lZGlhdGUodlJlZykpCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChyZWcpOworfQorCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkRG91YmxlKGludCBpbmRleCwg
RlBSZWdpc3RlcklEIHZhbHVlKQoreworICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJl
Z2lzdGVySW5kZXgoaW5kZXgpKSB7CisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgaW5D
b25zdGFudFBvb2wgPSBtX2NvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihpbmRleCk7CisgICAg
ICAgIGxvYWREb3VibGUoJmluQ29uc3RhbnRQb29sLCB2YWx1ZSk7CisgICAgfSBlbHNlCisgICAg
ICAgIGxvYWREb3VibGUoYWRkcmVzc0ZvcihpbmRleCksIHZhbHVlKTsKK30KKworaW5saW5lIHZv
aWQgSklUOjplbWl0TG9hZEludDMyVG9Eb3VibGUoaW50IGluZGV4LCBGUFJlZ2lzdGVySUQgdmFs
dWUpCit7CisgICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbmRl
eCkpIHsKKyAgICAgICAgQVNTRVJUKGlzT3BlcmFuZENvbnN0YW50SW1tZWRpYXRlSW50KGluZGV4
KSk7CisgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKEltbTMyKGdldENvbnN0YW50T3BlcmFu
ZChpbmRleCkuYXNJbnQzMigpKSwgdmFsdWUpOworICAgIH0gZWxzZQorICAgICAgICBjb252ZXJ0
SW50MzJUb0RvdWJsZShhZGRyZXNzRm9yKGluZGV4KSwgdmFsdWUpOworfQorCitBTFdBWVNfSU5M
SU5FIEpJVDo6SnVtcCBKSVQ6OmVtaXRKdW1wSWZJbW1lZGlhdGVJbnRlZ2VyKFJlZ2lzdGVySUQg
cmVnKQoreworICAgIHJldHVybiBicmFuY2g2NChBYm92ZU9yRXF1YWwsIHJlZywgdGFnVHlwZU51
bWJlclJlZ2lzdGVyKTsKK30KKworQUxXQVlTX0lOTElORSBKSVQ6Okp1bXAgSklUOjplbWl0SnVt
cElmTm90SW1tZWRpYXRlSW50ZWdlcihSZWdpc3RlcklEIHJlZykKK3sKKyAgICByZXR1cm4gYnJh
bmNoNjQoQmVsb3csIHJlZywgdGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKK30KKworQUxXQVlTX0lO
TElORSBKSVQ6Okp1bXAgSklUOjplbWl0SnVtcElmTm90SW1tZWRpYXRlSW50ZWdlcnMoUmVnaXN0
ZXJJRCByZWcxLCBSZWdpc3RlcklEIHJlZzIsIFJlZ2lzdGVySUQgc2NyYXRjaCkKK3sKKyAgICBt
b3ZlKHJlZzEsIHNjcmF0Y2gpOworICAgIGFuZDY0KHJlZzIsIHNjcmF0Y2gpOworICAgIHJldHVy
biBlbWl0SnVtcElmTm90SW1tZWRpYXRlSW50ZWdlcihzY3JhdGNoKTsKK30KKworQUxXQVlTX0lO
TElORSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tZWRpYXRlSW50ZWdlcihSZWdp
c3RlcklEIHJlZykKK3sKKyAgICBhZGRTbG93Q2FzZShlbWl0SnVtcElmTm90SW1tZWRpYXRlSW50
ZWdlcihyZWcpKTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SW1tZWRpYXRlSW50ZWdlcnMoUmVnaXN0ZXJJRCByZWcxLCBSZWdpc3RlcklEIHJlZzIs
IFJlZ2lzdGVySUQgc2NyYXRjaCkKK3sKKyAgICBhZGRTbG93Q2FzZShlbWl0SnVtcElmTm90SW1t
ZWRpYXRlSW50ZWdlcnMocmVnMSwgcmVnMiwgc2NyYXRjaCkpOworfQorCitBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1lZGlhdGVOdW1iZXIoUmVnaXN0ZXJJ
RCByZWcpCit7CisgICAgYWRkU2xvd0Nhc2UoZW1pdEp1bXBJZk5vdEltbWVkaWF0ZU51bWJlcihy
ZWcpKTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEZhc3RBcml0aFJlVGFnSW1t
ZWRpYXRlKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCit7CisgICAgZW1pdEZhc3RB
cml0aEludFRvSW1tTm9DaGVjayhzcmMsIGRlc3QpOworfQorCisvLyBvcGVyYW5kIGlzIGludDMy
X3QsIG11c3QgaGF2ZSBiZWVuIHplcm8tZXh0ZW5kZWQgaWYgcmVnaXN0ZXIgaXMgNjQtYml0Lgor
QUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEZhc3RBcml0aEludFRvSW1tTm9DaGVjayhSZWdp
c3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQoreworICAgIGlmIChzcmMgIT0gZGVzdCkKKyAg
ICAgICAgbW92ZShzcmMsIGRlc3QpOworICAgIG9yNjQodGFnVHlwZU51bWJlclJlZ2lzdGVyLCBk
ZXN0KTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFRhZ0FzQm9vbEltbWVkaWF0
ZShSZWdpc3RlcklEIHJlZykKK3sKKyAgICBvcjMyKFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxp
bnQzMl90PihWYWx1ZUZhbHNlKSksIHJlZyk7Cit9CisKKyNlbmRpZiAvLyBVU0UoSlNWQUxVRTMy
XzY0KQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShKSVQpCisKKyNl
bmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHJldmlzaW9u
IDEzMzk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMyw4ICsyMyw4IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZu
ZGVmIEpJVElubGluZU1ldGhvZHNfaAotI2RlZmluZSBKSVRJbmxpbmVNZXRob2RzX2gKKyNpZm5k
ZWYgSklUSW5saW5lc19oCisjZGVmaW5lIEpJVElubGluZXNfaAogCiAKICNpZiBFTkFCTEUoSklU
KQpAQCAtMTAwNCw0ICsxMDA0LDUgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFRhZ0Fz
Qm9vbEltbQogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIAotI2VuZGlmCisjZW5kaWYgLy8gSklU
SW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMy
XzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29k
ZXMzMl82NC5jcHAJKHJldmlzaW9uIDEzMzk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3Bjb2RlczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAog
I2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAjaW5jbHVkZSAiSklULmgiCiAKLSNpbmNsdWRlICJKSVRJ
bmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiSklUSW5saW5lcy5oIgogI2luY2x1ZGUgIkpJVFN0
dWJDYWxsLmgiCiAjaW5jbHVkZSAiSlNBcnJheS5oIgogI2luY2x1ZGUgIkpTQ2VsbC5oIgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAxMzM5
NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yOSw5ICsyOSw5IEBACiAjaW5jbHVkZSAiSklULmgiCiAKICNpbmNsdWRlICJB
cmd1bWVudHMuaCIKLSNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaCIKKyNpbmNs
dWRlICJDb3BpZWRTcGFjZUlubGluZXMuaCIKICNpbmNsdWRlICJIZWFwLmgiCi0jaW5jbHVkZSAi
SklUSW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkpJVElubGluZXMuaCIKICNpbmNsdWRlICJK
SVRTdHViQ2FsbC5oIgogI2luY2x1ZGUgIkpTQXJyYXkuaCIKICNpbmNsdWRlICJKU0NlbGwuaCIK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFj
Y2VzczMyXzY0LmNwcAkocmV2aXNpb24gMTMzOTY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyAr
MzIsNyBAQAogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkdDQXdhcmVKSVRTdHVi
Um91dGluZS5oIgogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCi0jaW5jbHVkZSAiSklUSW5saW5l
TWV0aG9kcy5oIgorI2luY2x1ZGUgIkpJVElubGluZXMuaCIKICNpbmNsdWRlICJKSVRTdHViQ2Fs
bC5oIgogI2luY2x1ZGUgIkpTQXJyYXkuaCIKICNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAko
cmV2aXNpb24gMTMzOTY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0
eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlICJH
Q0F3YXJlSklUU3R1YlJvdXRpbmUuaCIKICNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKICNpbmNs
dWRlICJJbnRlcnByZXRlci5oIgotI2luY2x1ZGUgIkpJVElubGluZU1ldGhvZHMuaCIKKyNpbmNs
dWRlICJKSVRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSklUU3R1YkNhbGwuaCIKICNpbmNsdWRlICJK
U0FycmF5LmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQXJyYXlDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDEz
Mzk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5Q29uc3RydWN0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw4ICsyNSw4IEBACiAjaW5jbHVkZSAiQXJyYXlDb25z
dHJ1Y3Rvci5oIgogCiAjaW5jbHVkZSAiQXJyYXlQcm90b3R5cGUuaCIKLSNpbmNsdWRlICJCdXR0
ZXJmbHlJbmxpbmVNZXRob2RzLmgiCi0jaW5jbHVkZSAiQ29waWVkU3BhY2VJbmxpbmVNZXRob2Rz
LmgiCisjaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lcy5oIgorI2luY2x1ZGUgIkNvcGllZFNwYWNl
SW5saW5lcy5oIgogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uSGVscGVy
cy5oIgogI2luY2x1ZGUgIkpTQXJyYXkuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDEzMzk2NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjQsMTAgKzI0LDEwIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
QXJyYXlQcm90b3R5cGUuaCIKIAotI2luY2x1ZGUgIkJ1dHRlcmZseUlubGluZU1ldGhvZHMuaCIK
KyNpbmNsdWRlICJCdXR0ZXJmbHlJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ2FjaGVkQ2FsbC5oIgog
I2luY2x1ZGUgIkNvZGVCbG9jay5oIgotI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lTWV0aG9k
cy5oIgorI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lcy5oIgogI2luY2x1ZGUgIkludGVycHJl
dGVyLmgiCiAjaW5jbHVkZSAiSklULmgiCiAjaW5jbHVkZSAiSlNTdHJpbmdCdWlsZGVyLmgiCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVNZXRob2Rz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5
SW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAxMzM5NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
MTgwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8K
LQotI2lmbmRlZiBCdXR0ZXJmbHlJbmxpbmVNZXRob2RzX2gKLSNkZWZpbmUgQnV0dGVyZmx5SW5s
aW5lTWV0aG9kc19oCi0KLSNpbmNsdWRlICJBcnJheVN0b3JhZ2UuaCIKLSNpbmNsdWRlICJCdXR0
ZXJmbHkuaCIKLSNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaCIKLSNpbmNsdWRl
ICJDb3B5VmlzaXRvci5oIgotI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgotI2luY2x1ZGUgIlN0
cnVjdHVyZS5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotaW5saW5lIEJ1dHRlcmZseSogQnV0dGVy
Zmx5OjpjcmVhdGVVbmluaXRpYWxpemVkKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90
IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRleGluZ0hl
YWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQotewotICAgIHZvaWQqIHRl
bXA7Ci0gICAgc2l6ZV90IHNpemUgPSB0b3RhbFNpemUocHJlQ2FwYWNpdHksIHByb3BlcnR5Q2Fw
YWNpdHksIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Ci0g
ICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKHNpemUsICZ0ZW1wKSkK
LSAgICAgICAgQ1JBU0goKTsKLSAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IGZyb21CYXNlKHRlbXAs
IHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5KTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQot
Ci1pbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wg
aGFzSW5kZXhpbmdIZWFkZXIsIGNvbnN0IEluZGV4aW5nSGVhZGVyJiBpbmRleGluZ0hlYWRlciwg
c2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQotewotICAgIEJ1dHRlcmZseSogcmVz
dWx0ID0gY3JlYXRlVW5pbml0aWFsaXplZCgKLSAgICAgICAgZ2xvYmFsRGF0YSwgcHJlQ2FwYWNp
dHksIHByb3BlcnR5Q2FwYWNpdHksIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRT
aXplSW5CeXRlcyk7Ci0gICAgaWYgKGhhc0luZGV4aW5nSGVhZGVyKQotICAgICAgICAqcmVzdWx0
LT5pbmRleGluZ0hlYWRlcigpID0gaW5kZXhpbmdIZWFkZXI7Ci0gICAgcmV0dXJuIHJlc3VsdDsK
LX0KLQotaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGUoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLXsKLSAgICByZXR1cm4gY3JlYXRlKGds
b2JhbERhdGEsIDAsIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgaGFzSW5kZXhpbmdI
ZWFkZXIoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSksIEluZGV4aW5nSGVhZGVyKCksIDApOwot
fQotCi1pbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWREdXJp
bmdDb2xsZWN0aW9uKENvcHlWaXNpdG9yJiB2aXNpdG9yLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNp
emVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5k
ZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCi17Ci0gICAgc2l6ZV90IHNpemUgPSB0b3RhbFNpemUo
cHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHksIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGlu
Z1BheWxvYWRTaXplSW5CeXRlcyk7Ci0gICAgQnV0dGVyZmx5KiByZXN1bHQgPSBmcm9tQmFzZSgK
LSAgICAgICAgdmlzaXRvci5hbGxvY2F0ZU5ld1NwYWNlKHNpemUpLAotICAgICAgICBwcmVDYXBh
Y2l0eSwgcHJvcGVydHlDYXBhY2l0eSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotaW5saW5l
IHZvaWQqIEJ1dHRlcmZseTo6YmFzZShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLXsKLSAgICByZXR1
cm4gYmFzZShpbmRleGluZ0hlYWRlcigpLT5wcmVDYXBhY2l0eShzdHJ1Y3R1cmUpLCBzdHJ1Y3R1
cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOwotfQotCi1pbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJm
bHk6Omdyb3dQcm9wZXJ0eVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3Qg
cHJlQ2FwYWNpdHksIHNpemVfdCBvbGRQcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5n
SGVhZGVyLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdQcm9w
ZXJ0eUNhcGFjaXR5KQotewotICAgIEFTU0VSVChuZXdQcm9wZXJ0eUNhcGFjaXR5ID4gb2xkUHJv
cGVydHlDYXBhY2l0eSk7Ci0gICAgQnV0dGVyZmx5KiByZXN1bHQgPSBjcmVhdGVVbmluaXRpYWxp
emVkKAotICAgICAgICBnbG9iYWxEYXRhLCBwcmVDYXBhY2l0eSwgbmV3UHJvcGVydHlDYXBhY2l0
eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKLSAgICBt
ZW1jcHkoCi0gICAgICAgIHJlc3VsdC0+cHJvcGVydHlTdG9yYWdlKCkgLSBvbGRQcm9wZXJ0eUNh
cGFjaXR5LAotICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UoKSAtIG9sZFByb3BlcnR5Q2FwYWNpdHks
Ci0gICAgICAgIHRvdGFsU2l6ZSgwLCBvbGRQcm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hl
YWRlciwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpKTsKLSAgICByZXR1cm4gcmVzdWx0Owot
fQotCi1pbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6Omdyb3dQcm9wZXJ0eVN0b3JhZ2UoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IG9sZFBy
b3BlcnR5Q2FwYWNpdHksIHNpemVfdCBuZXdQcm9wZXJ0eUNhcGFjaXR5KQotewotICAgIHJldHVy
biBncm93UHJvcGVydHlTdG9yYWdlKAotICAgICAgICBnbG9iYWxEYXRhLCBpbmRleGluZ0hlYWRl
cigpLT5wcmVDYXBhY2l0eShzdHJ1Y3R1cmUpLCBvbGRQcm9wZXJ0eUNhcGFjaXR5LAotICAgICAg
ICBoYXNJbmRleGluZ0hlYWRlcihzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSwKLSAgICAgICAg
aW5kZXhpbmdIZWFkZXIoKS0+aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMoc3RydWN0dXJlKSwg
bmV3UHJvcGVydHlDYXBhY2l0eSk7Ci19Ci0KLWlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6
Z3Jvd1Byb3BlcnR5U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSog
b2xkU3RydWN0dXJlLCBzaXplX3QgbmV3UHJvcGVydHlDYXBhY2l0eSkKLXsKLSAgICByZXR1cm4g
Z3Jvd1Byb3BlcnR5U3RvcmFnZSgKLSAgICAgICAgZ2xvYmFsRGF0YSwgb2xkU3RydWN0dXJlLCBv
bGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCksIG5ld1Byb3BlcnR5Q2FwYWNpdHkpOwot
fQotCi1pbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6Omdyb3dBcnJheVJpZ2h0KEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIHNpemVfdCBwcm9wZXJ0
eUNhcGFjaXR5LCBib29sIGhhZEluZGV4aW5nSGVhZGVyLCBzaXplX3Qgb2xkSW5kZXhpbmdQYXls
b2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKLXsK
LSAgICBBU1NFUlRfVU5VU0VEKG9sZFN0cnVjdHVyZSwgIWluZGV4aW5nSGVhZGVyKCktPnByZUNh
cGFjaXR5KG9sZFN0cnVjdHVyZSkpOwotICAgIEFTU0VSVF9VTlVTRUQob2xkU3RydWN0dXJlLCBo
YWRJbmRleGluZ0hlYWRlciA9PSBoYXNJbmRleGluZ0hlYWRlcihvbGRTdHJ1Y3R1cmUtPmluZGV4
aW5nVHlwZSgpKSk7Ci0gICAgdm9pZCogdGhlQmFzZSA9IGJhc2UoMCwgcHJvcGVydHlDYXBhY2l0
eSk7Ci0gICAgc2l6ZV90IG9sZFNpemUgPSB0b3RhbFNpemUoMCwgcHJvcGVydHlDYXBhY2l0eSwg
aGFkSW5kZXhpbmdIZWFkZXIsIG9sZEluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKLSAgICBz
aXplX3QgbmV3U2l6ZSA9IHRvdGFsU2l6ZSgwLCBwcm9wZXJ0eUNhcGFjaXR5LCB0cnVlLCBuZXdJ
bmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Ci0gICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5
UmVhbGxvY2F0ZVN0b3JhZ2UoJnRoZUJhc2UsIG9sZFNpemUsIG5ld1NpemUpKQotICAgICAgICBy
ZXR1cm4gMDsKLSAgICByZXR1cm4gZnJvbUJhc2UodGhlQmFzZSwgMCwgcHJvcGVydHlDYXBhY2l0
eSk7Ci19Ci0KLWlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Z3Jvd0FycmF5UmlnaHQoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgc2l6ZV90IG5l
d0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQotewotICAgIHJldHVybiBncm93QXJyYXlSaWdo
dCgKLSAgICAgICAgZ2xvYmFsRGF0YSwgb2xkU3RydWN0dXJlLCBvbGRTdHJ1Y3R1cmUtPm91dE9m
TGluZUNhcGFjaXR5KCksCi0gICAgICAgIGhhc0luZGV4aW5nSGVhZGVyKG9sZFN0cnVjdHVyZS0+
aW5kZXhpbmdUeXBlKCkpLAotICAgICAgICBpbmRleGluZ0hlYWRlcigpLT5pbmRleGluZ1BheWxv
YWRTaXplSW5CeXRlcyhvbGRTdHJ1Y3R1cmUpLCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRl
cyk7Ci19Ci0KLWlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6cmVzaXplQXJyYXkoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBvbGRIYXNJ
bmRleGluZ0hlYWRlciwgc2l6ZV90IG9sZEluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzLCBzaXpl
X3QgbmV3UHJlQ2FwYWNpdHksIGJvb2wgbmV3SGFzSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBuZXdJ
bmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKLXsKLSAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IGNy
ZWF0ZVVuaW5pdGlhbGl6ZWQoCi0gICAgICAgIGdsb2JhbERhdGEsIG5ld1ByZUNhcGFjaXR5LCBw
cm9wZXJ0eUNhcGFjaXR5LCBuZXdIYXNJbmRleGluZ0hlYWRlciwgbmV3SW5kZXhpbmdQYXlsb2Fk
U2l6ZUluQnl0ZXMpOwotICAgIC8vIEZJWE1FOiBUaGlzIGNvdWxkIGJlIG1hZGUgbXVjaCBtb3Jl
IGVmZmljaWVudCBpZiB3ZSB1c2VkIHRoZSBwcm9wZXJ0eSBzaXplLAotICAgIC8vIG5vdCB0aGUg
Y2FwYWNpdHkuCi0gICAgdm9pZCogdG8gPSByZXN1bHQtPnByb3BlcnR5U3RvcmFnZSgpIC0gcHJv
cGVydHlDYXBhY2l0eTsKLSAgICB2b2lkKiBmcm9tID0gcHJvcGVydHlTdG9yYWdlKCkgLSBwcm9w
ZXJ0eUNhcGFjaXR5OwotICAgIHNpemVfdCBzaXplID0gc3RkOjptaW4oCi0gICAgICAgIHRvdGFs
U2l6ZSgwLCBwcm9wZXJ0eUNhcGFjaXR5LCBvbGRIYXNJbmRleGluZ0hlYWRlciwgb2xkSW5kZXhp
bmdQYXlsb2FkU2l6ZUluQnl0ZXMpLAotICAgICAgICB0b3RhbFNpemUoMCwgcHJvcGVydHlDYXBh
Y2l0eSwgbmV3SGFzSW5kZXhpbmdIZWFkZXIsIG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVz
KSk7Ci0gICAgbWVtY3B5KHRvLCBmcm9tLCBzaXplKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQot
Ci1pbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OnJlc2l6ZUFycmF5KEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBuZXdQcmVDYXBhY2l0eSwg
c2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQotewotICAgIGJvb2wgaGFzSW5k
ZXhpbmdIZWFkZXIgPSBKU0M6Omhhc0luZGV4aW5nSGVhZGVyKHN0cnVjdHVyZS0+aW5kZXhpbmdU
eXBlKCkpOwotICAgIHJldHVybiByZXNpemVBcnJheSgKLSAgICAgICAgZ2xvYmFsRGF0YSwgc3Ry
dWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBoYXNJbmRleGluZ0hlYWRlciwKLSAgICAgICAg
aW5kZXhpbmdIZWFkZXIoKS0+aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMoc3RydWN0dXJlKSwg
bmV3UHJlQ2FwYWNpdHksCi0gICAgICAgIGhhc0luZGV4aW5nSGVhZGVyLCBuZXdJbmRleGluZ1Bh
eWxvYWRTaXplSW5CeXRlcyk7Ci19Ci0KLWlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6dW5z
aGlmdChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IG51bWJlck9mU2xvdHMpCi17Ci0gICAg
QVNTRVJUKGhhc0FycmF5U3RvcmFnZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSk7Ci0gICAg
QVNTRVJUKG51bWJlck9mU2xvdHMgPD0gaW5kZXhpbmdIZWFkZXIoKS0+cHJlQ2FwYWNpdHkoc3Ry
dWN0dXJlKSk7Ci0gICAgdW5zaWduZWQgcHJvcGVydHlDYXBhY2l0eSA9IHN0cnVjdHVyZS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKTsKLSAgICAvLyBGSVhNRTogSXQgd291bGQgcHJvYmFibHkgYmUgd2lz
ZSB0byByZXdyaXRlIHRoaXMgYXMgYSBsb29wIHNpbmNlICgxKSB3ZSBrbm93IGluIHdoaWNoCi0g
ICAgLy8gZGlyZWN0aW9uIHdlJ3JlIG1vdmluZyBtZW1vcnkgc28gd2UgZG9uJ3QgbmVlZCB0aGUg
ZXh0cmEgY2hlY2sgb2YgbWVtbW92ZSBhbmQgKDIpIHdlJ3JlCi0gICAgLy8gbW92aW5nIGEgc21h
bGwgYW1vdW50IG9mIG1lbW9yeSBpbiB0aGUgY29tbW9uIGNhc2Ugc28gdGhlIHRocm91Z2hwdXQg
b2YgbWVtbW92ZSB3b24ndAotICAgIC8vIGFtb3J0aXplIHRoZSBvdmVyaGVhZCBvZiBjYWxsaW5n
IGl0LiBBbmQgbm8sIHdlIGNhbm5vdCByZWx5IG9uIHRoZSBDKysgY29tcGlsZXIgdG8KLSAgICAv
LyBpbmxpbmUgbWVtbW92ZSAocGFydGljdWxhcmx5IHNpbmNlIHRoZSBzaXplIGFyZ3VtZW50IGlz
IGxpa2VseSB0byBiZSB2YXJpYWJsZSksIG5vciBjYW4KLSAgICAvLyB3ZSByZWx5IG9uIHRoZSBj
b21waWxlciB0byByZWNvZ25pemUgdGhlIG9yZGVyaW5nIG9mIHRoZSBwb2ludGVyIGFyZ3VtZW50
cyAoc2luY2UKLSAgICAvLyBwcm9wZXJ0eUNhcGFjaXR5IGlzIHZhcmlhYmxlIGFuZCBjb3VsZCBj
YXVzZSB3cmFwLWFyb3VuZCBhcyBmYXIgYXMgdGhlIGNvbXBpbGVyIGtub3dzKS4KLSAgICBtZW1t
b3ZlKAotICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UoKSAtIG51bWJlck9mU2xvdHMgLSBwcm9wZXJ0
eUNhcGFjaXR5LAotICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5Q2FwYWNpdHks
Ci0gICAgICAgIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiBwcm9wZXJ0eUNhcGFjaXR5ICsgc2l6
ZW9mKEluZGV4aW5nSGVhZGVyKSArIEFycmF5U3RvcmFnZTo6c2l6ZUZvcigwKSk7Ci0gICAgcmV0
dXJuIEluZGV4aW5nSGVhZGVyOjpmcm9tRW5kT2YocHJvcGVydHlTdG9yYWdlKCkgLSBudW1iZXJP
ZlNsb3RzKS0+YnV0dGVyZmx5KCk7Ci19Ci0KLWlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6
c2hpZnQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBudW1iZXJPZlNsb3RzKQotewotICAg
IEFTU0VSVChoYXNBcnJheVN0b3JhZ2Uoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpOwotICAg
IHVuc2lnbmVkIHByb3BlcnR5Q2FwYWNpdHkgPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5
KCk7Ci0gICAgLy8gRklYTUU6IFNlZSBjb21tZW50IGluIHVuc2hpZnQoKSwgYWJvdmUuCi0gICAg
bWVtbW92ZSgKLSAgICAgICAgcHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eUNhcGFjaXR5ICsg
bnVtYmVyT2ZTbG90cywKLSAgICAgICAgcHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eUNhcGFj
aXR5LAotICAgICAgICBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogcHJvcGVydHlDYXBhY2l0eSAr
IHNpemVvZihJbmRleGluZ0hlYWRlcikgKyBBcnJheVN0b3JhZ2U6OnNpemVGb3IoMCkpOwotICAg
IHJldHVybiBJbmRleGluZ0hlYWRlcjo6ZnJvbUVuZE9mKHByb3BlcnR5U3RvcmFnZSgpICsgbnVt
YmVyT2ZTbG90cyktPmJ1dHRlcmZseSgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2Vu
ZGlmIC8vIEJ1dHRlcmZseUlubGluZU1ldGhvZHNfaAotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lcy5oCShyZXZpc2lvbiAxMzM5NTUp
CShmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGluZU1ldGhv
ZHMuaDoxMzM5NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJ
bmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxODAgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCdXR0ZXJmbHlJbmxpbmVN
ZXRob2RzX2gKKyNkZWZpbmUgQnV0dGVyZmx5SW5saW5lTWV0aG9kc19oCisKKyNpbmNsdWRlICJB
cnJheVN0b3JhZ2UuaCIKKyNpbmNsdWRlICJCdXR0ZXJmbHkuaCIKKyNpbmNsdWRlICJDb3BpZWRT
cGFjZUlubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJDb3B5VmlzaXRvci5oIgorI2luY2x1ZGUg
IkpTR2xvYmFsRGF0YS5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgorCituYW1lc3BhY2UgSlND
IHsKKworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxpemVkKEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVy
dHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9h
ZFNpemVJbkJ5dGVzKQoreworICAgIHZvaWQqIHRlbXA7CisgICAgc2l6ZV90IHNpemUgPSB0b3Rh
bFNpemUocHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHksIGhhc0luZGV4aW5nSGVhZGVyLCBp
bmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5
QWxsb2NhdGVTdG9yYWdlKHNpemUsICZ0ZW1wKSkKKyAgICAgICAgQ1JBU0goKTsKKyAgICBCdXR0
ZXJmbHkqIHJlc3VsdCA9IGZyb21CYXNlKHRlbXAsIHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFj
aXR5KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJm
bHk6OmNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNpemVfdCBwcmVDYXBhY2l0eSwg
c2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIsIGNvbnN0IElu
ZGV4aW5nSGVhZGVyJiBpbmRleGluZ0hlYWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJ
bkJ5dGVzKQoreworICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gY3JlYXRlVW5pbml0aWFsaXplZCgK
KyAgICAgICAgZ2xvYmFsRGF0YSwgcHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHksIGhhc0lu
ZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgaWYgKGhhc0lu
ZGV4aW5nSGVhZGVyKQorICAgICAgICAqcmVzdWx0LT5pbmRleGluZ0hlYWRlcigpID0gaW5kZXhp
bmdIZWFkZXI7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5lIEJ1dHRlcmZseSogQnV0
dGVyZmx5OjpjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkKK3sKKyAgICByZXR1cm4gY3JlYXRlKGdsb2JhbERhdGEsIDAsIHN0cnVjdHVyZS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKSwgaGFzSW5kZXhpbmdIZWFkZXIoc3RydWN0dXJlLT5pbmRleGluZ1R5
cGUoKSksIEluZGV4aW5nSGVhZGVyKCksIDApOworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0
ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWREdXJpbmdDb2xsZWN0aW9uKENvcHlWaXNpdG9yJiB2
aXNpdG9yLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29s
IGhhc0luZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCit7
CisgICAgc2l6ZV90IHNpemUgPSB0b3RhbFNpemUocHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNp
dHksIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAg
QnV0dGVyZmx5KiByZXN1bHQgPSBmcm9tQmFzZSgKKyAgICAgICAgdmlzaXRvci5hbGxvY2F0ZU5l
d1NwYWNlKHNpemUpLAorICAgICAgICBwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5lIHZvaWQqIEJ1dHRlcmZseTo6YmFzZShTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICByZXR1cm4gYmFzZShpbmRleGluZ0hlYWRlcigpLT5w
cmVDYXBhY2l0eShzdHJ1Y3R1cmUpLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOwor
fQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6Omdyb3dQcm9wZXJ0eVN0b3JhZ2UoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBvbGRQcm9w
ZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5kZXhpbmdQYXls
b2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdQcm9wZXJ0eUNhcGFjaXR5KQoreworICAgIEFTU0VS
VChuZXdQcm9wZXJ0eUNhcGFjaXR5ID4gb2xkUHJvcGVydHlDYXBhY2l0eSk7CisgICAgQnV0dGVy
Zmx5KiByZXN1bHQgPSBjcmVhdGVVbmluaXRpYWxpemVkKAorICAgICAgICBnbG9iYWxEYXRhLCBw
cmVDYXBhY2l0eSwgbmV3UHJvcGVydHlDYXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4
aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBtZW1jcHkoCisgICAgICAgIHJlc3VsdC0+cHJv
cGVydHlTdG9yYWdlKCkgLSBvbGRQcm9wZXJ0eUNhcGFjaXR5LAorICAgICAgICBwcm9wZXJ0eVN0
b3JhZ2UoKSAtIG9sZFByb3BlcnR5Q2FwYWNpdHksCisgICAgICAgIHRvdGFsU2l6ZSgwLCBvbGRQ
cm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hlYWRlciwgaW5kZXhpbmdQYXlsb2FkU2l6ZUlu
Qnl0ZXMpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0
ZXJmbHk6Omdyb3dQcm9wZXJ0eVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IG9sZFByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBuZXdQ
cm9wZXJ0eUNhcGFjaXR5KQoreworICAgIHJldHVybiBncm93UHJvcGVydHlTdG9yYWdlKAorICAg
ICAgICBnbG9iYWxEYXRhLCBpbmRleGluZ0hlYWRlcigpLT5wcmVDYXBhY2l0eShzdHJ1Y3R1cmUp
LCBvbGRQcm9wZXJ0eUNhcGFjaXR5LAorICAgICAgICBoYXNJbmRleGluZ0hlYWRlcihzdHJ1Y3R1
cmUtPmluZGV4aW5nVHlwZSgpKSwKKyAgICAgICAgaW5kZXhpbmdIZWFkZXIoKS0+aW5kZXhpbmdQ
YXlsb2FkU2l6ZUluQnl0ZXMoc3RydWN0dXJlKSwgbmV3UHJvcGVydHlDYXBhY2l0eSk7Cit9CisK
K2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Z3Jvd1Byb3BlcnR5U3RvcmFnZShKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBzaXplX3QgbmV3UHJv
cGVydHlDYXBhY2l0eSkKK3sKKyAgICByZXR1cm4gZ3Jvd1Byb3BlcnR5U3RvcmFnZSgKKyAgICAg
ICAgZ2xvYmFsRGF0YSwgb2xkU3RydWN0dXJlLCBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFj
aXR5KCksIG5ld1Byb3BlcnR5Q2FwYWNpdHkpOworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0
ZXJmbHk6Omdyb3dBcnJheVJpZ2h0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJl
KiBvbGRTdHJ1Y3R1cmUsIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhZEluZGV4aW5n
SGVhZGVyLCBzaXplX3Qgb2xkSW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdJ
bmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKK3sKKyAgICBBU1NFUlRfVU5VU0VEKG9sZFN0cnVj
dHVyZSwgIWluZGV4aW5nSGVhZGVyKCktPnByZUNhcGFjaXR5KG9sZFN0cnVjdHVyZSkpOworICAg
IEFTU0VSVF9VTlVTRUQob2xkU3RydWN0dXJlLCBoYWRJbmRleGluZ0hlYWRlciA9PSBoYXNJbmRl
eGluZ0hlYWRlcihvbGRTdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSk7CisgICAgdm9pZCogdGhl
QmFzZSA9IGJhc2UoMCwgcHJvcGVydHlDYXBhY2l0eSk7CisgICAgc2l6ZV90IG9sZFNpemUgPSB0
b3RhbFNpemUoMCwgcHJvcGVydHlDYXBhY2l0eSwgaGFkSW5kZXhpbmdIZWFkZXIsIG9sZEluZGV4
aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBzaXplX3QgbmV3U2l6ZSA9IHRvdGFsU2l6ZSgw
LCBwcm9wZXJ0eUNhcGFjaXR5LCB0cnVlLCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7
CisgICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5UmVhbGxvY2F0ZVN0b3JhZ2UoJnRoZUJhc2Us
IG9sZFNpemUsIG5ld1NpemUpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gZnJvbUJh
c2UodGhlQmFzZSwgMCwgcHJvcGVydHlDYXBhY2l0eSk7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkq
IEJ1dHRlcmZseTo6Z3Jvd0FycmF5UmlnaHQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1
Y3R1cmUqIG9sZFN0cnVjdHVyZSwgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVz
KQoreworICAgIHJldHVybiBncm93QXJyYXlSaWdodCgKKyAgICAgICAgZ2xvYmFsRGF0YSwgb2xk
U3RydWN0dXJlLCBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCksCisgICAgICAgIGhh
c0luZGV4aW5nSGVhZGVyKG9sZFN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpLAorICAgICAgICBp
bmRleGluZ0hlYWRlcigpLT5pbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyhvbGRTdHJ1Y3R1cmUp
LCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkq
IEJ1dHRlcmZseTo6cmVzaXplQXJyYXkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3Qg
cHJvcGVydHlDYXBhY2l0eSwgYm9vbCBvbGRIYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IG9sZElu
ZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzLCBzaXplX3QgbmV3UHJlQ2FwYWNpdHksIGJvb2wgbmV3
SGFzSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykK
K3sKKyAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQoCisgICAgICAg
IGdsb2JhbERhdGEsIG5ld1ByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBuZXdIYXNJbmRl
eGluZ0hlYWRlciwgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIC8vIEZJWE1F
OiBUaGlzIGNvdWxkIGJlIG1hZGUgbXVjaCBtb3JlIGVmZmljaWVudCBpZiB3ZSB1c2VkIHRoZSBw
cm9wZXJ0eSBzaXplLAorICAgIC8vIG5vdCB0aGUgY2FwYWNpdHkuCisgICAgdm9pZCogdG8gPSBy
ZXN1bHQtPnByb3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVydHlDYXBhY2l0eTsKKyAgICB2b2lkKiBm
cm9tID0gcHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eUNhcGFjaXR5OworICAgIHNpemVfdCBz
aXplID0gc3RkOjptaW4oCisgICAgICAgIHRvdGFsU2l6ZSgwLCBwcm9wZXJ0eUNhcGFjaXR5LCBv
bGRIYXNJbmRleGluZ0hlYWRlciwgb2xkSW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpLAorICAg
ICAgICB0b3RhbFNpemUoMCwgcHJvcGVydHlDYXBhY2l0eSwgbmV3SGFzSW5kZXhpbmdIZWFkZXIs
IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKSk7CisgICAgbWVtY3B5KHRvLCBmcm9tLCBz
aXplKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJm
bHk6OnJlc2l6ZUFycmF5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIHNpemVfdCBuZXdQcmVDYXBhY2l0eSwgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNp
emVJbkJ5dGVzKQoreworICAgIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIgPSBKU0M6Omhhc0luZGV4
aW5nSGVhZGVyKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpOworICAgIHJldHVybiByZXNpemVB
cnJheSgKKyAgICAgICAgZ2xvYmFsRGF0YSwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgp
LCBoYXNJbmRleGluZ0hlYWRlciwKKyAgICAgICAgaW5kZXhpbmdIZWFkZXIoKS0+aW5kZXhpbmdQ
YXlsb2FkU2l6ZUluQnl0ZXMoc3RydWN0dXJlKSwgbmV3UHJlQ2FwYWNpdHksCisgICAgICAgIGhh
c0luZGV4aW5nSGVhZGVyLCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Cit9CisKK2lu
bGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6dW5zaGlmdChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
c2l6ZV90IG51bWJlck9mU2xvdHMpCit7CisgICAgQVNTRVJUKGhhc0FycmF5U3RvcmFnZShzdHJ1
Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSk7CisgICAgQVNTRVJUKG51bWJlck9mU2xvdHMgPD0gaW5k
ZXhpbmdIZWFkZXIoKS0+cHJlQ2FwYWNpdHkoc3RydWN0dXJlKSk7CisgICAgdW5zaWduZWQgcHJv
cGVydHlDYXBhY2l0eSA9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKKyAgICAvLyBG
SVhNRTogSXQgd291bGQgcHJvYmFibHkgYmUgd2lzZSB0byByZXdyaXRlIHRoaXMgYXMgYSBsb29w
IHNpbmNlICgxKSB3ZSBrbm93IGluIHdoaWNoCisgICAgLy8gZGlyZWN0aW9uIHdlJ3JlIG1vdmlu
ZyBtZW1vcnkgc28gd2UgZG9uJ3QgbmVlZCB0aGUgZXh0cmEgY2hlY2sgb2YgbWVtbW92ZSBhbmQg
KDIpIHdlJ3JlCisgICAgLy8gbW92aW5nIGEgc21hbGwgYW1vdW50IG9mIG1lbW9yeSBpbiB0aGUg
Y29tbW9uIGNhc2Ugc28gdGhlIHRocm91Z2hwdXQgb2YgbWVtbW92ZSB3b24ndAorICAgIC8vIGFt
b3J0aXplIHRoZSBvdmVyaGVhZCBvZiBjYWxsaW5nIGl0LiBBbmQgbm8sIHdlIGNhbm5vdCByZWx5
IG9uIHRoZSBDKysgY29tcGlsZXIgdG8KKyAgICAvLyBpbmxpbmUgbWVtbW92ZSAocGFydGljdWxh
cmx5IHNpbmNlIHRoZSBzaXplIGFyZ3VtZW50IGlzIGxpa2VseSB0byBiZSB2YXJpYWJsZSksIG5v
ciBjYW4KKyAgICAvLyB3ZSByZWx5IG9uIHRoZSBjb21waWxlciB0byByZWNvZ25pemUgdGhlIG9y
ZGVyaW5nIG9mIHRoZSBwb2ludGVyIGFyZ3VtZW50cyAoc2luY2UKKyAgICAvLyBwcm9wZXJ0eUNh
cGFjaXR5IGlzIHZhcmlhYmxlIGFuZCBjb3VsZCBjYXVzZSB3cmFwLWFyb3VuZCBhcyBmYXIgYXMg
dGhlIGNvbXBpbGVyIGtub3dzKS4KKyAgICBtZW1tb3ZlKAorICAgICAgICBwcm9wZXJ0eVN0b3Jh
Z2UoKSAtIG51bWJlck9mU2xvdHMgLSBwcm9wZXJ0eUNhcGFjaXR5LAorICAgICAgICBwcm9wZXJ0
eVN0b3JhZ2UoKSAtIHByb3BlcnR5Q2FwYWNpdHksCisgICAgICAgIHNpemVvZihFbmNvZGVkSlNW
YWx1ZSkgKiBwcm9wZXJ0eUNhcGFjaXR5ICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSArIEFycmF5
U3RvcmFnZTo6c2l6ZUZvcigwKSk7CisgICAgcmV0dXJuIEluZGV4aW5nSGVhZGVyOjpmcm9tRW5k
T2YocHJvcGVydHlTdG9yYWdlKCkgLSBudW1iZXJPZlNsb3RzKS0+YnV0dGVyZmx5KCk7Cit9CisK
K2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6c2hpZnQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IHNpemVfdCBudW1iZXJPZlNsb3RzKQoreworICAgIEFTU0VSVChoYXNBcnJheVN0b3JhZ2Uoc3Ry
dWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpOworICAgIHVuc2lnbmVkIHByb3BlcnR5Q2FwYWNpdHkg
PSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCk7CisgICAgLy8gRklYTUU6IFNlZSBjb21t
ZW50IGluIHVuc2hpZnQoKSwgYWJvdmUuCisgICAgbWVtbW92ZSgKKyAgICAgICAgcHJvcGVydHlT
dG9yYWdlKCkgLSBwcm9wZXJ0eUNhcGFjaXR5ICsgbnVtYmVyT2ZTbG90cywKKyAgICAgICAgcHJv
cGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eUNhcGFjaXR5LAorICAgICAgICBzaXplb2YoRW5jb2Rl
ZEpTVmFsdWUpICogcHJvcGVydHlDYXBhY2l0eSArIHNpemVvZihJbmRleGluZ0hlYWRlcikgKyBB
cnJheVN0b3JhZ2U6OnNpemVGb3IoMCkpOworICAgIHJldHVybiBJbmRleGluZ0hlYWRlcjo6ZnJv
bUVuZE9mKHByb3BlcnR5U3RvcmFnZSgpICsgbnVtYmVyT2ZTbG90cyktPmJ1dHRlcmZseSgpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEJ1dHRlcmZseUlubGluZU1ldGhv
ZHNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxp
bmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVy
Zmx5SW5saW5lcy5oCShyZXZpc2lvbiAxMzM5NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9CdXR0ZXJmbHlJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDEyICsyMywx
MiBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBCdXR0ZXJmbHlJbmxpbmVNZXRo
b2RzX2gKLSNkZWZpbmUgQnV0dGVyZmx5SW5saW5lTWV0aG9kc19oCisjaWZuZGVmIEJ1dHRlcmZs
eUlubGluZXNfaAorI2RlZmluZSBCdXR0ZXJmbHlJbmxpbmVzX2gKIAogI2luY2x1ZGUgIkFycmF5
U3RvcmFnZS5oIgogI2luY2x1ZGUgIkJ1dHRlcmZseS5oIgotI2luY2x1ZGUgIkNvcGllZFNwYWNl
SW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lcy5oIgogI2luY2x1
ZGUgIkNvcHlWaXNpdG9yLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgiCiAjaW5jbHVkZSAi
U3RydWN0dXJlLmgiCkBAIC0xNzYsNSArMTc2LDUgQEAgaW5saW5lIEJ1dHRlcmZseSogQnV0dGVy
Zmx5OjpzaGlmdChTdHJ1YwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAotI2VuZGlmIC8vIEJ1dHRl
cmZseUlubGluZU1ldGhvZHNfaAorI2VuZGlmIC8vIEJ1dHRlcmZseUlubGluZXNfaAogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlcklubGluZU1ldGhv
ZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGlu
Z0hlYWRlcklubGluZU1ldGhvZHMuaAkocmV2aXNpb24gMTMzOTY1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNjQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKLSAqLwotCi0jaWZuZGVmIEluZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kc19oCi0jZGVm
aW5lIEluZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kc19oCi0KLSNpbmNsdWRlICJBcnJheVN0b3Jh
Z2UuaCIKLSNpbmNsdWRlICJJbmRleGluZ0hlYWRlci5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZS5o
IgotCi1uYW1lc3BhY2UgSlNDIHsKLQotaW5saW5lIHNpemVfdCBJbmRleGluZ0hlYWRlcjo6cHJl
Q2FwYWNpdHkoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi17Ci0gICAgaWYgKExJS0VMWSghaGFzQXJy
YXlTdG9yYWdlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKSkKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgCi0gICAgcmV0dXJuIGFycmF5U3RvcmFnZSgpLT5tX2luZGV4QmlhczsKLX0KLQotaW5s
aW5lIHNpemVfdCBJbmRleGluZ0hlYWRlcjo6aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMoU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCi17Ci0gICAgc3dpdGNoIChzdHJ1Y3R1cmUtPmluZGV4aW5nVHlw
ZSgpKSB7Ci0gICAgY2FzZSBBTExfVU5ERUNJREVEX0lOREVYSU5HX1RZUEVTOgotICAgIGNhc2Ug
QUxMX0lOVDMyX0lOREVYSU5HX1RZUEVTOgotICAgIGNhc2UgQUxMX0RPVUJMRV9JTkRFWElOR19U
WVBFUzoKLSAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgotICAgICAgICBy
ZXR1cm4gdmVjdG9yTGVuZ3RoKCkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOwotICAgICAgICAK
LSAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgotICAgICAgICByZXR1
cm4gQXJyYXlTdG9yYWdlOjpzaXplRm9yKGFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKSk7
Ci0gICAgICAgIAotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVCghaGFzSW5kZXhlZFByb3Bl
cnRpZXMoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpOwotICAgICAgICByZXR1cm4gMDsKLSAg
ICB9Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gSW5kZXhpbmdIZWFkZXJJ
bmxpbmVNZXRob2RzX2gKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5k
ZXhpbmdIZWFkZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW5kZXhpbmdIZWFkZXJJbmxpbmVzLmgJKHJldmlzaW9uIDEzMzk1NSkJKGZyb20g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2Rz
Lmg6MTMzOTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFk
ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEluZGV4aW5nSGVhZGVy
SW5saW5lTWV0aG9kc19oCisjZGVmaW5lIEluZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kc19oCisK
KyNpbmNsdWRlICJBcnJheVN0b3JhZ2UuaCIKKyNpbmNsdWRlICJJbmRleGluZ0hlYWRlci5oIgor
I2luY2x1ZGUgIlN0cnVjdHVyZS5oIgorCituYW1lc3BhY2UgSlNDIHsKKworaW5saW5lIHNpemVf
dCBJbmRleGluZ0hlYWRlcjo6cHJlQ2FwYWNpdHkoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7Cisg
ICAgaWYgKExJS0VMWSghaGFzQXJyYXlTdG9yYWdlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkp
KSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgcmV0dXJuIGFycmF5U3RvcmFnZSgpLT5t
X2luZGV4QmlhczsKK30KKworaW5saW5lIHNpemVfdCBJbmRleGluZ0hlYWRlcjo6aW5kZXhpbmdQ
YXlsb2FkU2l6ZUluQnl0ZXMoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAgc3dpdGNoIChz
dHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBTExfVU5ERUNJREVEX0lOREVY
SU5HX1RZUEVTOgorICAgIGNhc2UgQUxMX0lOVDMyX0lOREVYSU5HX1RZUEVTOgorICAgIGNhc2Ug
QUxMX0RPVUJMRV9JTkRFWElOR19UWVBFUzoKKyAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVY
SU5HX1RZUEVTOgorICAgICAgICByZXR1cm4gdmVjdG9yTGVuZ3RoKCkgKiBzaXplb2YoRW5jb2Rl
ZEpTVmFsdWUpOworICAgICAgICAKKyAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5H
X1RZUEVTOgorICAgICAgICByZXR1cm4gQXJyYXlTdG9yYWdlOjpzaXplRm9yKGFycmF5U3RvcmFn
ZSgpLT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFT
U0VSVCghaGFzSW5kZXhlZFByb3BlcnRpZXMoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpOwor
ICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5k
aWYgLy8gSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXJJbmxpbmVzLmgJKHJl
dmlzaW9uIDEzMzk1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5n
SGVhZGVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw4ICsyMyw4IEBACiAgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKICAqLwogCi0jaWZuZGVmIEluZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kc19oCi0j
ZGVmaW5lIEluZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kc19oCisjaWZuZGVmIEluZGV4aW5nSGVh
ZGVySW5saW5lc19oCisjZGVmaW5lIEluZGV4aW5nSGVhZGVySW5saW5lc19oCiAKICNpbmNsdWRl
ICJBcnJheVN0b3JhZ2UuaCIKICNpbmNsdWRlICJJbmRleGluZ0hlYWRlci5oIgpAQCAtNjAsNSAr
NjAsNSBAQCBpbmxpbmUgc2l6ZV90IEluZGV4aW5nSGVhZGVyOjppbmRleGluZ1BhCiAKIH0gLy8g
bmFtZXNwYWNlIEpTQwogCi0jZW5kaWYgLy8gSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzX2gK
KyNlbmRpZiAvLyBJbmRleGluZ0hlYWRlcklubGluZXNfaAogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uaAkocmV2aXNpb24gMTMzOTY1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMwLDcgKzMwLDcgQEAKICNkZWZpbmUgSlNBY3RpdmF0aW9uX2gKIAogI2luY2x1ZGUg
IkNvZGVCbG9jay5oIgotI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oIgorI2lu
Y2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTVmFyaWFibGVPYmplY3Qu
aCIKICNpbmNsdWRlICJOb2Rlcy5oIgogI2luY2x1ZGUgIlN5bWJvbFRhYmxlLmgiCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAkocmV2aXNpb24gMTMzOTY1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI0LDE0ICsyNCwxNCBAQAogI2luY2x1ZGUgIkpTQXJyYXkuaCIKIAogI2luY2x1
ZGUgIkFycmF5UHJvdG90eXBlLmgiCi0jaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5o
IgotI2luY2x1ZGUgIkNvcGllZFNwYWNlLmgiCi0jaW5jbHVkZSAiQ29waWVkU3BhY2VJbmxpbmVN
ZXRob2RzLmgiCisjaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lcy5oIgogI2luY2x1ZGUgIkNhY2hl
ZENhbGwuaCIKKyNpbmNsdWRlICJDb3BpZWRTcGFjZS5oIgorI2luY2x1ZGUgIkNvcGllZFNwYWNl
SW5saW5lcy5oIgogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiRXhlY3V0YWJsZS5oIgog
I2luY2x1ZGUgIkdldHRlclNldHRlci5oIgotI2luY2x1ZGUgIkluZGV4aW5nSGVhZGVySW5saW5l
TWV0aG9kcy5oIgorI2luY2x1ZGUgIkluZGV4aW5nSGVhZGVySW5saW5lcy5oIgogI2luY2x1ZGUg
IlByb3BlcnR5TmFtZUFycmF5LmgiCiAjaW5jbHVkZSAiUmVqZWN0LmgiCiAjaW5jbHVkZSA8d3Rm
L0FWTFRyZWUuaD4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXku
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJ
KHJldmlzaW9uIDEzMzk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJy
YXkuaAkod29ya2luZyBjb3B5KQpAQCAtMjIsNyArMjIsNyBAQAogI2RlZmluZSBKU0FycmF5X2gK
IAogI2luY2x1ZGUgIkFycmF5Q29udmVudGlvbnMuaCIKLSNpbmNsdWRlICJCdXR0ZXJmbHlJbmxp
bmVNZXRob2RzLmgiCisjaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lcy5oIgogI2luY2x1ZGUgIkpT
T2JqZWN0LmgiCiAKIG5hbWVzcGFjZSBKU0MgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNDZWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNDZWxsLmgJKHJldmlzaW9uIDEzMzk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQ2VsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw5ICsyOCw5IEBACiAjaW5j
bHVkZSAiQ29uc3RydWN0RGF0YS5oIgogI2luY2x1ZGUgIkhlYXAuaCIKICNpbmNsdWRlICJKU0xv
Y2suaCIKLSNpbmNsdWRlICJKU1ZhbHVlSW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkpTVmFs
dWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKLSNpbmNsdWRlICJTbG90Vmlz
aXRvcklubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKICNp
bmNsdWRlICJUeXBlZEFycmF5RGVzY3JpcHRvci5oIgogI2luY2x1ZGUgIldyaXRlQmFycmllci5o
IgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMTMzOTY1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwx
NCArMjQsMTQgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgog
Ci0jaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oIgotI2luY2x1ZGUgIkNvcGllZFNw
YWNlSW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkJ1dHRlcmZseUlubGluZXMuaCIKKyNpbmNs
dWRlICJDb3BpZWRTcGFjZUlubGluZXMuaCIKICNpbmNsdWRlICJDb3B5VmlzaXRvci5oIgotI2lu
Y2x1ZGUgIkNvcHlWaXNpdG9ySW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkNvcHlWaXNpdG9y
SW5saW5lcy5oIgogI2luY2x1ZGUgIkRhdGVQcm90b3R5cGUuaCIKICNpbmNsdWRlICJFcnJvckNv
bnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCi0jaW5jbHVkZSAiSW5kZXhp
bmdIZWFkZXJJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiSW5kZXhpbmdIZWFkZXJJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0Lmgi
CiAjaW5jbHVkZSAiTG9va3VwLmgiCkBAIC00Miw3ICs0Miw3IEBACiAjaW5jbHVkZSAiUHJvcGVy
dHlEZXNjcmlwdG9yLmgiCiAjaW5jbHVkZSAiUHJvcGVydHlOYW1lQXJyYXkuaCIKICNpbmNsdWRl
ICJSZWplY3QuaCIKLSNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZU1ldGhvZHMuaCIKKyNpbmNs
dWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKICNpbmNsdWRlIDxtYXRoLmg+CiAjaW5jbHVkZSA8
d3RmL0Fzc2VydGlvbnMuaD4KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNWYWx1ZUlubGluZU1ldGhvZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1ZhbHVlSW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAxMzM5NjUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlSW5saW5lTWV0aG9kcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDQ5NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgSlNWYWx1ZUlubGluZU1ldGhvZHNfaAotI2RlZmlu
ZSBKU1ZhbHVlSW5saW5lTWV0aG9kc19oCi0KLSNpbmNsdWRlICJKU1ZhbHVlLmgiCi0KLW5hbWVz
cGFjZSBKU0MgewotCi0gICAgQUxXQVlTX0lOTElORSBpbnQzMl90IEpTVmFsdWU6OnRvSW50MzIo
RXhlY1N0YXRlKiBleGVjKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKGlzSW50MzIoKSkKLSAg
ICAgICAgICAgIHJldHVybiBhc0ludDMyKCk7Ci0gICAgICAgIHJldHVybiBKU0M6OnRvSW50MzIo
dG9OdW1iZXIoZXhlYykpOwotICAgIH0KLQotICAgIGlubGluZSB1aW50MzJfdCBKU1ZhbHVlOjp0
b1VJbnQzMihFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0Ci0gICAgewotICAgICAgICAvLyBTZWUgY29t
bWVudCBvbiBKU0M6OnRvVUludDMyLCBhYm92ZS4KLSAgICAgICAgcmV0dXJuIHRvSW50MzIoZXhl
Yyk7Ci0gICAgfQotCi0gICAgaW5saW5lIGJvb2wgSlNWYWx1ZTo6aXNVSW50MzIoKSBjb25zdAot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGlzSW50MzIoKSAmJiBhc0ludDMyKCkgPj0gMDsKLSAgICB9
Ci0KLSAgICBpbmxpbmUgdWludDMyX3QgSlNWYWx1ZTo6YXNVSW50MzIoKSBjb25zdAotICAgIHsK
LSAgICAgICAgQVNTRVJUKGlzVUludDMyKCkpOwotICAgICAgICByZXR1cm4gYXNJbnQzMigpOwot
ICAgIH0KLQotICAgIGlubGluZSBkb3VibGUgSlNWYWx1ZTo6YXNOdW1iZXIoKSBjb25zdAotICAg
IHsKLSAgICAgICAgQVNTRVJUKGlzTnVtYmVyKCkpOwotICAgICAgICByZXR1cm4gaXNJbnQzMigp
ID8gYXNJbnQzMigpIDogYXNEb3VibGUoKTsKLSAgICB9Ci0KLSAgICBpbmxpbmUgSlNWYWx1ZSBq
c05hTigpCi0gICAgewotICAgICAgICByZXR1cm4gSlNWYWx1ZShRTmFOKTsKLSAgICB9Ci0KLSAg
ICBpbmxpbmUgSlNWYWx1ZTo6SlNWYWx1ZShjaGFyIGkpCi0gICAgewotICAgICAgICAqdGhpcyA9
IEpTVmFsdWUoc3RhdGljX2Nhc3Q8aW50MzJfdD4oaSkpOwotICAgIH0KLQotICAgIGlubGluZSBK
U1ZhbHVlOjpKU1ZhbHVlKHVuc2lnbmVkIGNoYXIgaSkKLSAgICB7Ci0gICAgICAgICp0aGlzID0g
SlNWYWx1ZShzdGF0aWNfY2FzdDxpbnQzMl90PihpKSk7Ci0gICAgfQotCi0gICAgaW5saW5lIEpT
VmFsdWU6OkpTVmFsdWUoc2hvcnQgaSkKLSAgICB7Ci0gICAgICAgICp0aGlzID0gSlNWYWx1ZShz
dGF0aWNfY2FzdDxpbnQzMl90PihpKSk7Ci0gICAgfQotCi0gICAgaW5saW5lIEpTVmFsdWU6OkpT
VmFsdWUodW5zaWduZWQgc2hvcnQgaSkKLSAgICB7Ci0gICAgICAgICp0aGlzID0gSlNWYWx1ZShz
dGF0aWNfY2FzdDxpbnQzMl90PihpKSk7Ci0gICAgfQotCi0gICAgaW5saW5lIEpTVmFsdWU6OkpT
VmFsdWUodW5zaWduZWQgaSkKLSAgICB7Ci0gICAgICAgIGlmIChzdGF0aWNfY2FzdDxpbnQzMl90
PihpKSA8IDApIHsKLSAgICAgICAgICAgICp0aGlzID0gSlNWYWx1ZShFbmNvZGVBc0RvdWJsZSwg
c3RhdGljX2Nhc3Q8ZG91YmxlPihpKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LSAgICAgICAgKnRoaXMgPSBKU1ZhbHVlKHN0YXRpY19jYXN0PGludDMyX3Q+KGkpKTsKLSAgICB9
Ci0KLSAgICBpbmxpbmUgSlNWYWx1ZTo6SlNWYWx1ZShsb25nIGkpCi0gICAgewotICAgICAgICBp
ZiAoc3RhdGljX2Nhc3Q8aW50MzJfdD4oaSkgIT0gaSkgewotICAgICAgICAgICAgKnRoaXMgPSBK
U1ZhbHVlKEVuY29kZUFzRG91YmxlLCBzdGF0aWNfY2FzdDxkb3VibGU+KGkpKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAqdGhpcyA9IEpTVmFsdWUoc3RhdGljX2Nh
c3Q8aW50MzJfdD4oaSkpOwotICAgIH0KLQotICAgIGlubGluZSBKU1ZhbHVlOjpKU1ZhbHVlKHVu
c2lnbmVkIGxvbmcgaSkKLSAgICB7Ci0gICAgICAgIGlmIChzdGF0aWNfY2FzdDx1aW50MzJfdD4o
aSkgIT0gaSkgewotICAgICAgICAgICAgKnRoaXMgPSBKU1ZhbHVlKEVuY29kZUFzRG91YmxlLCBz
dGF0aWNfY2FzdDxkb3VibGU+KGkpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgICAgICAqdGhpcyA9IEpTVmFsdWUoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGkpKTsKLSAgICB9
Ci0KLSAgICBpbmxpbmUgSlNWYWx1ZTo6SlNWYWx1ZShsb25nIGxvbmcgaSkKLSAgICB7Ci0gICAg
ICAgIGlmIChzdGF0aWNfY2FzdDxpbnQzMl90PihpKSAhPSBpKSB7Ci0gICAgICAgICAgICAqdGhp
cyA9IEpTVmFsdWUoRW5jb2RlQXNEb3VibGUsIHN0YXRpY19jYXN0PGRvdWJsZT4oaSkpOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgICp0aGlzID0gSlNWYWx1ZShzdGF0
aWNfY2FzdDxpbnQzMl90PihpKSk7Ci0gICAgfQotCi0gICAgaW5saW5lIEpTVmFsdWU6OkpTVmFs
dWUodW5zaWduZWQgbG9uZyBsb25nIGkpCi0gICAgewotICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8
dWludDMyX3Q+KGkpICE9IGkpIHsKLSAgICAgICAgICAgICp0aGlzID0gSlNWYWx1ZShFbmNvZGVB
c0RvdWJsZSwgc3RhdGljX2Nhc3Q8ZG91YmxlPihpKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICAgICAgKnRoaXMgPSBKU1ZhbHVlKHN0YXRpY19jYXN0PHVpbnQzMl90Pihp
KSk7Ci0gICAgfQotCi0gICAgaW5saW5lIEpTVmFsdWU6OkpTVmFsdWUoZG91YmxlIGQpCi0gICAg
ewotICAgICAgICBjb25zdCBpbnQzMl90IGFzSW50MzIgPSBzdGF0aWNfY2FzdDxpbnQzMl90Pihk
KTsKLSAgICAgICAgaWYgKGFzSW50MzIgIT0gZCB8fCAoIWFzSW50MzIgJiYgc2lnbmJpdChkKSkp
IHsgLy8gdHJ1ZSBmb3IgLTAuMAotICAgICAgICAgICAgKnRoaXMgPSBKU1ZhbHVlKEVuY29kZUFz
RG91YmxlLCBkKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAqdGhp
cyA9IEpTVmFsdWUoc3RhdGljX2Nhc3Q8aW50MzJfdD4oZCkpOwotICAgIH0KLQotICAgIGlubGlu
ZSBFbmNvZGVkSlNWYWx1ZSBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiB2YWx1ZS51LmFzSW50NjQ7Ci0gICAgfQotCi0gICAgaW5saW5lIEpTVmFs
dWUgSlNWYWx1ZTo6ZGVjb2RlKEVuY29kZWRKU1ZhbHVlIGVuY29kZWRKU1ZhbHVlKQotICAgIHsK
LSAgICAgICAgSlNWYWx1ZSB2OwotICAgICAgICB2LnUuYXNJbnQ2NCA9IGVuY29kZWRKU1ZhbHVl
OwotICAgICAgICByZXR1cm4gdjsKLSAgICB9Ci0KLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAg
IGlubGluZSBKU1ZhbHVlOjpKU1ZhbHVlKCkKLSAgICB7Ci0gICAgICAgIHUuYXNCaXRzLnRhZyA9
IEVtcHR5VmFsdWVUYWc7Ci0gICAgICAgIHUuYXNCaXRzLnBheWxvYWQgPSAwOwotICAgIH0KLQot
ICAgIGlubGluZSBKU1ZhbHVlOjpKU1ZhbHVlKEpTTnVsbFRhZykKLSAgICB7Ci0gICAgICAgIHUu
YXNCaXRzLnRhZyA9IE51bGxUYWc7Ci0gICAgICAgIHUuYXNCaXRzLnBheWxvYWQgPSAwOwotICAg
IH0KLSAgICAKLSAgICBpbmxpbmUgSlNWYWx1ZTo6SlNWYWx1ZShKU1VuZGVmaW5lZFRhZykKLSAg
ICB7Ci0gICAgICAgIHUuYXNCaXRzLnRhZyA9IFVuZGVmaW5lZFRhZzsKLSAgICAgICAgdS5hc0Jp
dHMucGF5bG9hZCA9IDA7Ci0gICAgfQotICAgIAotICAgIGlubGluZSBKU1ZhbHVlOjpKU1ZhbHVl
KEpTVHJ1ZVRhZykKLSAgICB7Ci0gICAgICAgIHUuYXNCaXRzLnRhZyA9IEJvb2xlYW5UYWc7Ci0g
ICAgICAgIHUuYXNCaXRzLnBheWxvYWQgPSAxOwotICAgIH0KLSAgICAKLSAgICBpbmxpbmUgSlNW
YWx1ZTo6SlNWYWx1ZShKU0ZhbHNlVGFnKQotICAgIHsKLSAgICAgICAgdS5hc0JpdHMudGFnID0g
Qm9vbGVhblRhZzsKLSAgICAgICAgdS5hc0JpdHMucGF5bG9hZCA9IDA7Ci0gICAgfQotCi0gICAg
aW5saW5lIEpTVmFsdWU6OkpTVmFsdWUoSGFzaFRhYmxlRGVsZXRlZFZhbHVlVGFnKQotICAgIHsK
LSAgICAgICAgdS5hc0JpdHMudGFnID0gRGVsZXRlZFZhbHVlVGFnOwotICAgICAgICB1LmFzQml0
cy5wYXlsb2FkID0gMDsKLSAgICB9Ci0KLSAgICBpbmxpbmUgSlNWYWx1ZTo6SlNWYWx1ZShKU0Nl
bGwqIHB0cikKLSAgICB7Ci0gICAgICAgIGlmIChwdHIpCi0gICAgICAgICAgICB1LmFzQml0cy50
YWcgPSBDZWxsVGFnOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB1LmFzQml0cy50YWcgPSBF
bXB0eVZhbHVlVGFnOwotICAgICAgICB1LmFzQml0cy5wYXlsb2FkID0gcmVpbnRlcnByZXRfY2Fz
dDxpbnQzMl90PihwdHIpOwotICAgIH0KLQotICAgIGlubGluZSBKU1ZhbHVlOjpKU1ZhbHVlKGNv
bnN0IEpTQ2VsbCogcHRyKQotICAgIHsKLSAgICAgICAgaWYgKHB0cikKLSAgICAgICAgICAgIHUu
YXNCaXRzLnRhZyA9IENlbGxUYWc7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHUuYXNCaXRz
LnRhZyA9IEVtcHR5VmFsdWVUYWc7Ci0gICAgICAgIHUuYXNCaXRzLnBheWxvYWQgPSByZWludGVy
cHJldF9jYXN0PGludDMyX3Q+KGNvbnN0X2Nhc3Q8SlNDZWxsKj4ocHRyKSk7Ci0gICAgfQotCi0g
ICAgaW5saW5lIEpTVmFsdWU6Om9wZXJhdG9yIGJvb2woKSBjb25zdAotICAgIHsKLSAgICAgICAg
QVNTRVJUKHRhZygpICE9IERlbGV0ZWRWYWx1ZVRhZyk7Ci0gICAgICAgIHJldHVybiB0YWcoKSAh
PSBFbXB0eVZhbHVlVGFnOwotICAgIH0KLQotICAgIGlubGluZSBib29sIEpTVmFsdWU6Om9wZXJh
dG9yPT0oY29uc3QgSlNWYWx1ZSYgb3RoZXIpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4g
dS5hc0ludDY0ID09IG90aGVyLnUuYXNJbnQ2NDsKLSAgICB9Ci0KLSAgICBpbmxpbmUgYm9vbCBK
U1ZhbHVlOjpvcGVyYXRvciE9KGNvbnN0IEpTVmFsdWUmIG90aGVyKSBjb25zdAotICAgIHsKLSAg
ICAgICAgcmV0dXJuIHUuYXNJbnQ2NCAhPSBvdGhlci51LmFzSW50NjQ7Ci0gICAgfQotCi0gICAg
aW5saW5lIGJvb2wgSlNWYWx1ZTo6aXNFbXB0eSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1
cm4gdGFnKCkgPT0gRW1wdHlWYWx1ZVRhZzsKLSAgICB9Ci0KLSAgICBpbmxpbmUgYm9vbCBKU1Zh
bHVlOjppc1VuZGVmaW5lZCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gdGFnKCkgPT0g
VW5kZWZpbmVkVGFnOwotICAgIH0KLQotICAgIGlubGluZSBib29sIEpTVmFsdWU6OmlzTnVsbCgp
IGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gdGFnKCkgPT0gTnVsbFRhZzsKLSAgICB9Ci0K
LSAgICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjppc1VuZGVmaW5lZE9yTnVsbCgpIGNvbnN0Ci0gICAg
ewotICAgICAgICByZXR1cm4gaXNVbmRlZmluZWQoKSB8fCBpc051bGwoKTsKLSAgICB9Ci0KLSAg
ICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjppc0NlbGwoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0
dXJuIHRhZygpID09IENlbGxUYWc7Ci0gICAgfQotCi0gICAgaW5saW5lIGJvb2wgSlNWYWx1ZTo6
aXNJbnQzMigpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gdGFnKCkgPT0gSW50MzJUYWc7
Ci0gICAgfQotCi0gICAgaW5saW5lIGJvb2wgSlNWYWx1ZTo6aXNEb3VibGUoKSBjb25zdAotICAg
IHsKLSAgICAgICAgcmV0dXJuIHRhZygpIDwgTG93ZXN0VGFnOwotICAgIH0KLQotICAgIGlubGlu
ZSBib29sIEpTVmFsdWU6OmlzVHJ1ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gdGFn
KCkgPT0gQm9vbGVhblRhZyAmJiBwYXlsb2FkKCk7Ci0gICAgfQotCi0gICAgaW5saW5lIGJvb2wg
SlNWYWx1ZTo6aXNGYWxzZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gdGFnKCkgPT0g
Qm9vbGVhblRhZyAmJiAhcGF5bG9hZCgpOwotICAgIH0KLQotICAgIGlubGluZSB1aW50MzJfdCBK
U1ZhbHVlOjp0YWcoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIHUuYXNCaXRzLnRhZzsK
LSAgICB9Ci0gICAgCi0gICAgaW5saW5lIGludDMyX3QgSlNWYWx1ZTo6cGF5bG9hZCgpIGNvbnN0
Ci0gICAgewotICAgICAgICByZXR1cm4gdS5hc0JpdHMucGF5bG9hZDsKLSAgICB9Ci0gICAgCi0g
ICAgaW5saW5lIGludDMyX3QgSlNWYWx1ZTo6YXNJbnQzMigpIGNvbnN0Ci0gICAgewotICAgICAg
ICBBU1NFUlQoaXNJbnQzMigpKTsKLSAgICAgICAgcmV0dXJuIHUuYXNCaXRzLnBheWxvYWQ7Ci0g
ICAgfQotICAgIAotICAgIGlubGluZSBkb3VibGUgSlNWYWx1ZTo6YXNEb3VibGUoKSBjb25zdAot
ICAgIHsKLSAgICAgICAgQVNTRVJUKGlzRG91YmxlKCkpOwotICAgICAgICByZXR1cm4gdS5hc0Rv
dWJsZTsKLSAgICB9Ci0gICAgCi0gICAgQUxXQVlTX0lOTElORSBKU0NlbGwqIEpTVmFsdWU6OmFz
Q2VsbCgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoaXNDZWxsKCkpOwotICAgICAgICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxKU0NlbGwqPih1LmFzQml0cy5wYXlsb2FkKTsKLSAgICB9
Ci0KLSAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWU6OkpTVmFsdWUoRW5jb2RlQXNEb3VibGVUYWcs
IGRvdWJsZSBkKQotICAgIHsKLSAgICAgICAgdS5hc0RvdWJsZSA9IGQ7Ci0gICAgfQotCi0gICAg
aW5saW5lIEpTVmFsdWU6OkpTVmFsdWUoaW50IGkpCi0gICAgewotICAgICAgICB1LmFzQml0cy50
YWcgPSBJbnQzMlRhZzsKLSAgICAgICAgdS5hc0JpdHMucGF5bG9hZCA9IGk7Ci0gICAgfQotCi0j
aWYgRU5BQkxFKExMSU5UX0NfTE9PUCkKLSAgICBpbmxpbmUgSlNWYWx1ZTo6SlNWYWx1ZShpbnQz
Ml90IHRhZywgaW50MzJfdCBwYXlsb2FkKQotICAgIHsKLSAgICAgICAgdS5hc0JpdHMudGFnID0g
dGFnOwotICAgICAgICB1LmFzQml0cy5wYXlsb2FkID0gcGF5bG9hZDsKLSAgICB9Ci0jZW5kaWYK
LQotICAgIGlubGluZSBib29sIEpTVmFsdWU6OmlzTnVtYmVyKCkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBpc0ludDMyKCkgfHwgaXNEb3VibGUoKTsKLSAgICB9Ci0KLSAgICBpbmxpbmUg
Ym9vbCBKU1ZhbHVlOjppc0Jvb2xlYW4oKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGlz
VHJ1ZSgpIHx8IGlzRmFsc2UoKTsKLSAgICB9Ci0KLSAgICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjph
c0Jvb2xlYW4oKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGlzQm9vbGVhbigpKTsKLSAg
ICAgICAgcmV0dXJuIHBheWxvYWQoKTsKLSAgICB9Ci0KLSNlbHNlIC8vICFVU0UoSlNWQUxVRTMy
XzY0KSBpLmUuIFVTRShKU1ZBTFVFNjQpCi0KLSAgICAvLyAweDAgY2FuIG5ldmVyIG9jY3VyIG5h
dHVyYWxseSBiZWNhdXNlIGl0IGhhcyBhIHRhZyBvZiAwMCwgaW5kaWNhdGluZyBhIHBvaW50ZXIg
dmFsdWUsIGJ1dCBhIHBheWxvYWQgb2YgMHgwLCB3aGljaCBpcyBpbiB0aGUgKGludmFsaWQpIHpl
cm8gcGFnZS4KLSAgICBpbmxpbmUgSlNWYWx1ZTo6SlNWYWx1ZSgpCi0gICAgewotICAgICAgICB1
LmFzSW50NjQgPSBWYWx1ZUVtcHR5OwotICAgIH0KLQotICAgIC8vIDB4NCBjYW4gbmV2ZXIgb2Nj
dXIgbmF0dXJhbGx5IGJlY2F1c2UgaXQgaGFzIGEgdGFnIG9mIDAwLCBpbmRpY2F0aW5nIGEgcG9p
bnRlciB2YWx1ZSwgYnV0IGEgcGF5bG9hZCBvZiAweDQsIHdoaWNoIGlzIGluIHRoZSAoaW52YWxp
ZCkgemVybyBwYWdlLgotICAgIGlubGluZSBKU1ZhbHVlOjpKU1ZhbHVlKEhhc2hUYWJsZURlbGV0
ZWRWYWx1ZVRhZykKLSAgICB7Ci0gICAgICAgIHUuYXNJbnQ2NCA9IFZhbHVlRGVsZXRlZDsKLSAg
ICB9Ci0KLSAgICBpbmxpbmUgSlNWYWx1ZTo6SlNWYWx1ZShKU0NlbGwqIHB0cikKLSAgICB7Ci0g
ICAgICAgIHUuYXNJbnQ2NCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihwdHIpOwotICAg
IH0KLQotICAgIGlubGluZSBKU1ZhbHVlOjpKU1ZhbHVlKGNvbnN0IEpTQ2VsbCogcHRyKQotICAg
IHsKLSAgICAgICAgdS5hc0ludDY0ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGNvbnN0
X2Nhc3Q8SlNDZWxsKj4ocHRyKSk7Ci0gICAgfQotCi0gICAgaW5saW5lIEpTVmFsdWU6Om9wZXJh
dG9yIGJvb2woKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIHUuYXNJbnQ2NDsKLSAgICB9
Ci0KLSAgICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjpvcGVyYXRvcj09KGNvbnN0IEpTVmFsdWUmIG90
aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIHUuYXNJbnQ2NCA9PSBvdGhlci51LmFz
SW50NjQ7Ci0gICAgfQotCi0gICAgaW5saW5lIGJvb2wgSlNWYWx1ZTo6b3BlcmF0b3IhPShjb25z
dCBKU1ZhbHVlJiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiB1LmFzSW50NjQg
IT0gb3RoZXIudS5hc0ludDY0OwotICAgIH0KLQotICAgIGlubGluZSBib29sIEpTVmFsdWU6Omlz
RW1wdHkoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIHUuYXNJbnQ2NCA9PSBWYWx1ZUVt
cHR5OwotICAgIH0KLQotICAgIGlubGluZSBib29sIEpTVmFsdWU6OmlzVW5kZWZpbmVkKCkgY29u
c3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBhc1ZhbHVlKCkgPT0gSlNWYWx1ZShKU1VuZGVmaW5l
ZCk7Ci0gICAgfQotCi0gICAgaW5saW5lIGJvb2wgSlNWYWx1ZTo6aXNOdWxsKCkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBhc1ZhbHVlKCkgPT0gSlNWYWx1ZShKU051bGwpOwotICAgIH0K
LQotICAgIGlubGluZSBib29sIEpTVmFsdWU6OmlzVHJ1ZSgpIGNvbnN0Ci0gICAgewotICAgICAg
ICByZXR1cm4gYXNWYWx1ZSgpID09IEpTVmFsdWUoSlNUcnVlKTsKLSAgICB9Ci0KLSAgICBpbmxp
bmUgYm9vbCBKU1ZhbHVlOjppc0ZhbHNlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBh
c1ZhbHVlKCkgPT0gSlNWYWx1ZShKU0ZhbHNlKTsKLSAgICB9Ci0KLSAgICBpbmxpbmUgYm9vbCBK
U1ZhbHVlOjphc0Jvb2xlYW4oKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGlzQm9vbGVh
bigpKTsKLSAgICAgICAgcmV0dXJuIGFzVmFsdWUoKSA9PSBKU1ZhbHVlKEpTVHJ1ZSk7Ci0gICAg
fQotCi0gICAgaW5saW5lIGludDMyX3QgSlNWYWx1ZTo6YXNJbnQzMigpIGNvbnN0Ci0gICAgewot
ICAgICAgICBBU1NFUlQoaXNJbnQzMigpKTsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGlu
dDMyX3Q+KHUuYXNJbnQ2NCk7Ci0gICAgfQotCi0gICAgaW5saW5lIGJvb2wgSlNWYWx1ZTo6aXNE
b3VibGUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGlzTnVtYmVyKCkgJiYgIWlzSW50
MzIoKTsKLSAgICB9Ci0KLSAgICBpbmxpbmUgSlNWYWx1ZTo6SlNWYWx1ZShKU051bGxUYWcpCi0g
ICAgewotICAgICAgICB1LmFzSW50NjQgPSBWYWx1ZU51bGw7Ci0gICAgfQotICAgIAotICAgIGlu
bGluZSBKU1ZhbHVlOjpKU1ZhbHVlKEpTVW5kZWZpbmVkVGFnKQotICAgIHsKLSAgICAgICAgdS5h
c0ludDY0ID0gVmFsdWVVbmRlZmluZWQ7Ci0gICAgfQotCi0gICAgaW5saW5lIEpTVmFsdWU6OkpT
VmFsdWUoSlNUcnVlVGFnKQotICAgIHsKLSAgICAgICAgdS5hc0ludDY0ID0gVmFsdWVUcnVlOwot
ICAgIH0KLQotICAgIGlubGluZSBKU1ZhbHVlOjpKU1ZhbHVlKEpTRmFsc2VUYWcpCi0gICAgewot
ICAgICAgICB1LmFzSW50NjQgPSBWYWx1ZUZhbHNlOwotICAgIH0KLQotICAgIGlubGluZSBib29s
IEpTVmFsdWU6OmlzVW5kZWZpbmVkT3JOdWxsKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIC8vIFVu
ZGVmaW5lZCBhbmQgbnVsbCBzaGFyZSB0aGUgc2FtZSB2YWx1ZSwgYmFyIHRoZSAndW5kZWZpbmVk
JyBiaXQgaW4gdGhlIGV4dGVuZGVkIHRhZy4KLSAgICAgICAgcmV0dXJuICh1LmFzSW50NjQgJiB+
VGFnQml0VW5kZWZpbmVkKSA9PSBWYWx1ZU51bGw7Ci0gICAgfQotCi0gICAgaW5saW5lIGJvb2wg
SlNWYWx1ZTo6aXNCb29sZWFuKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiAodS5hc0lu
dDY0ICYgfjEpID09IFZhbHVlRmFsc2U7Ci0gICAgfQotCi0gICAgaW5saW5lIGJvb2wgSlNWYWx1
ZTo6aXNDZWxsKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiAhKHUuYXNJbnQ2NCAmIFRh
Z01hc2spOwotICAgIH0KLQotICAgIGlubGluZSBib29sIEpTVmFsdWU6OmlzSW50MzIoKSBjb25z
dAotICAgIHsKLSAgICAgICAgcmV0dXJuICh1LmFzSW50NjQgJiBUYWdUeXBlTnVtYmVyKSA9PSBU
YWdUeXBlTnVtYmVyOwotICAgIH0KLQotICAgIGlubGluZSBpbnQ2NF90IHJlaW50ZXJwcmV0RG91
YmxlVG9JbnQ2NChkb3VibGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gYml0d2lzZV9j
YXN0PGludDY0X3Q+KHZhbHVlKTsKLSAgICB9Ci0gICAgaW5saW5lIGRvdWJsZSByZWludGVycHJl
dEludDY0VG9Eb3VibGUoaW50NjRfdCB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBiaXR3
aXNlX2Nhc3Q8ZG91YmxlPih2YWx1ZSk7Ci0gICAgfQotCi0gICAgQUxXQVlTX0lOTElORSBKU1Zh
bHVlOjpKU1ZhbHVlKEVuY29kZUFzRG91YmxlVGFnLCBkb3VibGUgZCkKLSAgICB7Ci0gICAgICAg
IHUuYXNJbnQ2NCA9IHJlaW50ZXJwcmV0RG91YmxlVG9JbnQ2NChkKSArIERvdWJsZUVuY29kZU9m
ZnNldDsKLSAgICB9Ci0KLSAgICBpbmxpbmUgSlNWYWx1ZTo6SlNWYWx1ZShpbnQgaSkKLSAgICB7
Ci0gICAgICAgIHUuYXNJbnQ2NCA9IFRhZ1R5cGVOdW1iZXIgfCBzdGF0aWNfY2FzdDx1aW50MzJf
dD4oaSk7Ci0gICAgfQotCi0gICAgaW5saW5lIGRvdWJsZSBKU1ZhbHVlOjphc0RvdWJsZSgpIGNv
bnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoaXNEb3VibGUoKSk7Ci0gICAgICAgIHJldHVybiBy
ZWludGVycHJldEludDY0VG9Eb3VibGUodS5hc0ludDY0IC0gRG91YmxlRW5jb2RlT2Zmc2V0KTsK
LSAgICB9Ci0KLSAgICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjppc051bWJlcigpIGNvbnN0Ci0gICAg
ewotICAgICAgICByZXR1cm4gdS5hc0ludDY0ICYgVGFnVHlwZU51bWJlcjsKLSAgICB9Ci0KLSAg
ICBBTFdBWVNfSU5MSU5FIEpTQ2VsbCogSlNWYWx1ZTo6YXNDZWxsKCkgY29uc3QKLSAgICB7Ci0g
ICAgICAgIEFTU0VSVChpc0NlbGwoKSk7Ci0gICAgICAgIHJldHVybiB1LnB0cjsKLSAgICB9Ci0K
LSNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlm
IC8vIEpTVmFsdWVJbmxpbmVNZXRob2RzX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTVmFsdWVJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNWYWx1ZUlubGluZXMuaAkocmV2aXNpb24gMTMzOTU1KQkoZnJvbSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlSW5saW5lTWV0aG9kcy5oOjEzMzk1NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFsdWVJbmxpbmVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw0OTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU1ZhbHVlSW5saW5lTWV0aG9kc19oCisjZGVmaW5l
IEpTVmFsdWVJbmxpbmVNZXRob2RzX2gKKworI2luY2x1ZGUgIkpTVmFsdWUuaCIKKworbmFtZXNw
YWNlIEpTQyB7CisKKyAgICBBTFdBWVNfSU5MSU5FIGludDMyX3QgSlNWYWx1ZTo6dG9JbnQzMihF
eGVjU3RhdGUqIGV4ZWMpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXNJbnQzMigpKQorICAg
ICAgICAgICAgcmV0dXJuIGFzSW50MzIoKTsKKyAgICAgICAgcmV0dXJuIEpTQzo6dG9JbnQzMih0
b051bWJlcihleGVjKSk7CisgICAgfQorCisgICAgaW5saW5lIHVpbnQzMl90IEpTVmFsdWU6OnRv
VUludDMyKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKKyAgICB7CisgICAgICAgIC8vIFNlZSBjb21t
ZW50IG9uIEpTQzo6dG9VSW50MzIsIGFib3ZlLgorICAgICAgICByZXR1cm4gdG9JbnQzMihleGVj
KTsKKyAgICB9CisKKyAgICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjppc1VJbnQzMigpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gaXNJbnQzMigpICYmIGFzSW50MzIoKSA+PSAwOworICAgIH0K
KworICAgIGlubGluZSB1aW50MzJfdCBKU1ZhbHVlOjphc1VJbnQzMigpIGNvbnN0CisgICAgewor
ICAgICAgICBBU1NFUlQoaXNVSW50MzIoKSk7CisgICAgICAgIHJldHVybiBhc0ludDMyKCk7Cisg
ICAgfQorCisgICAgaW5saW5lIGRvdWJsZSBKU1ZhbHVlOjphc051bWJlcigpIGNvbnN0CisgICAg
eworICAgICAgICBBU1NFUlQoaXNOdW1iZXIoKSk7CisgICAgICAgIHJldHVybiBpc0ludDMyKCkg
PyBhc0ludDMyKCkgOiBhc0RvdWJsZSgpOworICAgIH0KKworICAgIGlubGluZSBKU1ZhbHVlIGpz
TmFOKCkKKyAgICB7CisgICAgICAgIHJldHVybiBKU1ZhbHVlKFFOYU4pOworICAgIH0KKworICAg
IGlubGluZSBKU1ZhbHVlOjpKU1ZhbHVlKGNoYXIgaSkKKyAgICB7CisgICAgICAgICp0aGlzID0g
SlNWYWx1ZShzdGF0aWNfY2FzdDxpbnQzMl90PihpKSk7CisgICAgfQorCisgICAgaW5saW5lIEpT
VmFsdWU6OkpTVmFsdWUodW5zaWduZWQgY2hhciBpKQorICAgIHsKKyAgICAgICAgKnRoaXMgPSBK
U1ZhbHVlKHN0YXRpY19jYXN0PGludDMyX3Q+KGkpKTsKKyAgICB9CisKKyAgICBpbmxpbmUgSlNW
YWx1ZTo6SlNWYWx1ZShzaG9ydCBpKQorICAgIHsKKyAgICAgICAgKnRoaXMgPSBKU1ZhbHVlKHN0
YXRpY19jYXN0PGludDMyX3Q+KGkpKTsKKyAgICB9CisKKyAgICBpbmxpbmUgSlNWYWx1ZTo6SlNW
YWx1ZSh1bnNpZ25lZCBzaG9ydCBpKQorICAgIHsKKyAgICAgICAgKnRoaXMgPSBKU1ZhbHVlKHN0
YXRpY19jYXN0PGludDMyX3Q+KGkpKTsKKyAgICB9CisKKyAgICBpbmxpbmUgSlNWYWx1ZTo6SlNW
YWx1ZSh1bnNpZ25lZCBpKQorICAgIHsKKyAgICAgICAgaWYgKHN0YXRpY19jYXN0PGludDMyX3Q+
KGkpIDwgMCkgeworICAgICAgICAgICAgKnRoaXMgPSBKU1ZhbHVlKEVuY29kZUFzRG91YmxlLCBz
dGF0aWNfY2FzdDxkb3VibGU+KGkpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgICAgICAqdGhpcyA9IEpTVmFsdWUoc3RhdGljX2Nhc3Q8aW50MzJfdD4oaSkpOworICAgIH0K
KworICAgIGlubGluZSBKU1ZhbHVlOjpKU1ZhbHVlKGxvbmcgaSkKKyAgICB7CisgICAgICAgIGlm
IChzdGF0aWNfY2FzdDxpbnQzMl90PihpKSAhPSBpKSB7CisgICAgICAgICAgICAqdGhpcyA9IEpT
VmFsdWUoRW5jb2RlQXNEb3VibGUsIHN0YXRpY19jYXN0PGRvdWJsZT4oaSkpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgICp0aGlzID0gSlNWYWx1ZShzdGF0aWNfY2Fz
dDxpbnQzMl90PihpKSk7CisgICAgfQorCisgICAgaW5saW5lIEpTVmFsdWU6OkpTVmFsdWUodW5z
aWduZWQgbG9uZyBpKQorICAgIHsKKyAgICAgICAgaWYgKHN0YXRpY19jYXN0PHVpbnQzMl90Pihp
KSAhPSBpKSB7CisgICAgICAgICAgICAqdGhpcyA9IEpTVmFsdWUoRW5jb2RlQXNEb3VibGUsIHN0
YXRpY19jYXN0PGRvdWJsZT4oaSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgICp0aGlzID0gSlNWYWx1ZShzdGF0aWNfY2FzdDx1aW50MzJfdD4oaSkpOworICAgIH0K
KworICAgIGlubGluZSBKU1ZhbHVlOjpKU1ZhbHVlKGxvbmcgbG9uZyBpKQorICAgIHsKKyAgICAg
ICAgaWYgKHN0YXRpY19jYXN0PGludDMyX3Q+KGkpICE9IGkpIHsKKyAgICAgICAgICAgICp0aGlz
ID0gSlNWYWx1ZShFbmNvZGVBc0RvdWJsZSwgc3RhdGljX2Nhc3Q8ZG91YmxlPihpKSk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgKnRoaXMgPSBKU1ZhbHVlKHN0YXRp
Y19jYXN0PGludDMyX3Q+KGkpKTsKKyAgICB9CisKKyAgICBpbmxpbmUgSlNWYWx1ZTo6SlNWYWx1
ZSh1bnNpZ25lZCBsb25nIGxvbmcgaSkKKyAgICB7CisgICAgICAgIGlmIChzdGF0aWNfY2FzdDx1
aW50MzJfdD4oaSkgIT0gaSkgeworICAgICAgICAgICAgKnRoaXMgPSBKU1ZhbHVlKEVuY29kZUFz
RG91YmxlLCBzdGF0aWNfY2FzdDxkb3VibGU+KGkpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICAqdGhpcyA9IEpTVmFsdWUoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGkp
KTsKKyAgICB9CisKKyAgICBpbmxpbmUgSlNWYWx1ZTo6SlNWYWx1ZShkb3VibGUgZCkKKyAgICB7
CisgICAgICAgIGNvbnN0IGludDMyX3QgYXNJbnQzMiA9IHN0YXRpY19jYXN0PGludDMyX3Q+KGQp
OworICAgICAgICBpZiAoYXNJbnQzMiAhPSBkIHx8ICghYXNJbnQzMiAmJiBzaWduYml0KGQpKSkg
eyAvLyB0cnVlIGZvciAtMC4wCisgICAgICAgICAgICAqdGhpcyA9IEpTVmFsdWUoRW5jb2RlQXNE
b3VibGUsIGQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgICp0aGlz
ID0gSlNWYWx1ZShzdGF0aWNfY2FzdDxpbnQzMl90PihkKSk7CisgICAgfQorCisgICAgaW5saW5l
IEVuY29kZWRKU1ZhbHVlIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHZhbHVlLnUuYXNJbnQ2NDsKKyAgICB9CisKKyAgICBpbmxpbmUgSlNWYWx1
ZSBKU1ZhbHVlOjpkZWNvZGUoRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEpTVmFsdWUpCisgICAgewor
ICAgICAgICBKU1ZhbHVlIHY7CisgICAgICAgIHYudS5hc0ludDY0ID0gZW5jb2RlZEpTVmFsdWU7
CisgICAgICAgIHJldHVybiB2OworICAgIH0KKworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAg
aW5saW5lIEpTVmFsdWU6OkpTVmFsdWUoKQorICAgIHsKKyAgICAgICAgdS5hc0JpdHMudGFnID0g
RW1wdHlWYWx1ZVRhZzsKKyAgICAgICAgdS5hc0JpdHMucGF5bG9hZCA9IDA7CisgICAgfQorCisg
ICAgaW5saW5lIEpTVmFsdWU6OkpTVmFsdWUoSlNOdWxsVGFnKQorICAgIHsKKyAgICAgICAgdS5h
c0JpdHMudGFnID0gTnVsbFRhZzsKKyAgICAgICAgdS5hc0JpdHMucGF5bG9hZCA9IDA7CisgICAg
fQorICAgIAorICAgIGlubGluZSBKU1ZhbHVlOjpKU1ZhbHVlKEpTVW5kZWZpbmVkVGFnKQorICAg
IHsKKyAgICAgICAgdS5hc0JpdHMudGFnID0gVW5kZWZpbmVkVGFnOworICAgICAgICB1LmFzQml0
cy5wYXlsb2FkID0gMDsKKyAgICB9CisgICAgCisgICAgaW5saW5lIEpTVmFsdWU6OkpTVmFsdWUo
SlNUcnVlVGFnKQorICAgIHsKKyAgICAgICAgdS5hc0JpdHMudGFnID0gQm9vbGVhblRhZzsKKyAg
ICAgICAgdS5hc0JpdHMucGF5bG9hZCA9IDE7CisgICAgfQorICAgIAorICAgIGlubGluZSBKU1Zh
bHVlOjpKU1ZhbHVlKEpTRmFsc2VUYWcpCisgICAgeworICAgICAgICB1LmFzQml0cy50YWcgPSBC
b29sZWFuVGFnOworICAgICAgICB1LmFzQml0cy5wYXlsb2FkID0gMDsKKyAgICB9CisKKyAgICBp
bmxpbmUgSlNWYWx1ZTo6SlNWYWx1ZShIYXNoVGFibGVEZWxldGVkVmFsdWVUYWcpCisgICAgewor
ICAgICAgICB1LmFzQml0cy50YWcgPSBEZWxldGVkVmFsdWVUYWc7CisgICAgICAgIHUuYXNCaXRz
LnBheWxvYWQgPSAwOworICAgIH0KKworICAgIGlubGluZSBKU1ZhbHVlOjpKU1ZhbHVlKEpTQ2Vs
bCogcHRyKQorICAgIHsKKyAgICAgICAgaWYgKHB0cikKKyAgICAgICAgICAgIHUuYXNCaXRzLnRh
ZyA9IENlbGxUYWc7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHUuYXNCaXRzLnRhZyA9IEVt
cHR5VmFsdWVUYWc7CisgICAgICAgIHUuYXNCaXRzLnBheWxvYWQgPSByZWludGVycHJldF9jYXN0
PGludDMyX3Q+KHB0cik7CisgICAgfQorCisgICAgaW5saW5lIEpTVmFsdWU6OkpTVmFsdWUoY29u
c3QgSlNDZWxsKiBwdHIpCisgICAgeworICAgICAgICBpZiAocHRyKQorICAgICAgICAgICAgdS5h
c0JpdHMudGFnID0gQ2VsbFRhZzsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdS5hc0JpdHMu
dGFnID0gRW1wdHlWYWx1ZVRhZzsKKyAgICAgICAgdS5hc0JpdHMucGF5bG9hZCA9IHJlaW50ZXJw
cmV0X2Nhc3Q8aW50MzJfdD4oY29uc3RfY2FzdDxKU0NlbGwqPihwdHIpKTsKKyAgICB9CisKKyAg
ICBpbmxpbmUgSlNWYWx1ZTo6b3BlcmF0b3IgYm9vbCgpIGNvbnN0CisgICAgeworICAgICAgICBB
U1NFUlQodGFnKCkgIT0gRGVsZXRlZFZhbHVlVGFnKTsKKyAgICAgICAgcmV0dXJuIHRhZygpICE9
IEVtcHR5VmFsdWVUYWc7CisgICAgfQorCisgICAgaW5saW5lIGJvb2wgSlNWYWx1ZTo6b3BlcmF0
b3I9PShjb25zdCBKU1ZhbHVlJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB1
LmFzSW50NjQgPT0gb3RoZXIudS5hc0ludDY0OworICAgIH0KKworICAgIGlubGluZSBib29sIEpT
VmFsdWU6Om9wZXJhdG9yIT0oY29uc3QgSlNWYWx1ZSYgb3RoZXIpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gdS5hc0ludDY0ICE9IG90aGVyLnUuYXNJbnQ2NDsKKyAgICB9CisKKyAgICBp
bmxpbmUgYm9vbCBKU1ZhbHVlOjppc0VtcHR5KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biB0YWcoKSA9PSBFbXB0eVZhbHVlVGFnOworICAgIH0KKworICAgIGlubGluZSBib29sIEpTVmFs
dWU6OmlzVW5kZWZpbmVkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0YWcoKSA9PSBV
bmRlZmluZWRUYWc7CisgICAgfQorCisgICAgaW5saW5lIGJvb2wgSlNWYWx1ZTo6aXNOdWxsKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0YWcoKSA9PSBOdWxsVGFnOworICAgIH0KKwor
ICAgIGlubGluZSBib29sIEpTVmFsdWU6OmlzVW5kZWZpbmVkT3JOdWxsKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBpc1VuZGVmaW5lZCgpIHx8IGlzTnVsbCgpOworICAgIH0KKworICAg
IGlubGluZSBib29sIEpTVmFsdWU6OmlzQ2VsbCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gdGFnKCkgPT0gQ2VsbFRhZzsKKyAgICB9CisKKyAgICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjpp
c0ludDMyKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0YWcoKSA9PSBJbnQzMlRhZzsK
KyAgICB9CisKKyAgICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjppc0RvdWJsZSgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gdGFnKCkgPCBMb3dlc3RUYWc7CisgICAgfQorCisgICAgaW5saW5l
IGJvb2wgSlNWYWx1ZTo6aXNUcnVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0YWco
KSA9PSBCb29sZWFuVGFnICYmIHBheWxvYWQoKTsKKyAgICB9CisKKyAgICBpbmxpbmUgYm9vbCBK
U1ZhbHVlOjppc0ZhbHNlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0YWcoKSA9PSBC
b29sZWFuVGFnICYmICFwYXlsb2FkKCk7CisgICAgfQorCisgICAgaW5saW5lIHVpbnQzMl90IEpT
VmFsdWU6OnRhZygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdS5hc0JpdHMudGFnOwor
ICAgIH0KKyAgICAKKyAgICBpbmxpbmUgaW50MzJfdCBKU1ZhbHVlOjpwYXlsb2FkKCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiB1LmFzQml0cy5wYXlsb2FkOworICAgIH0KKyAgICAKKyAg
ICBpbmxpbmUgaW50MzJfdCBKU1ZhbHVlOjphc0ludDMyKCkgY29uc3QKKyAgICB7CisgICAgICAg
IEFTU0VSVChpc0ludDMyKCkpOworICAgICAgICByZXR1cm4gdS5hc0JpdHMucGF5bG9hZDsKKyAg
ICB9CisgICAgCisgICAgaW5saW5lIGRvdWJsZSBKU1ZhbHVlOjphc0RvdWJsZSgpIGNvbnN0Cisg
ICAgeworICAgICAgICBBU1NFUlQoaXNEb3VibGUoKSk7CisgICAgICAgIHJldHVybiB1LmFzRG91
YmxlOworICAgIH0KKyAgICAKKyAgICBBTFdBWVNfSU5MSU5FIEpTQ2VsbCogSlNWYWx1ZTo6YXND
ZWxsKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0NlbGwoKSk7CisgICAgICAgIHJl
dHVybiByZWludGVycHJldF9jYXN0PEpTQ2VsbCo+KHUuYXNCaXRzLnBheWxvYWQpOworICAgIH0K
KworICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZTo6SlNWYWx1ZShFbmNvZGVBc0RvdWJsZVRhZywg
ZG91YmxlIGQpCisgICAgeworICAgICAgICB1LmFzRG91YmxlID0gZDsKKyAgICB9CisKKyAgICBp
bmxpbmUgSlNWYWx1ZTo6SlNWYWx1ZShpbnQgaSkKKyAgICB7CisgICAgICAgIHUuYXNCaXRzLnRh
ZyA9IEludDMyVGFnOworICAgICAgICB1LmFzQml0cy5wYXlsb2FkID0gaTsKKyAgICB9CisKKyNp
ZiBFTkFCTEUoTExJTlRfQ19MT09QKQorICAgIGlubGluZSBKU1ZhbHVlOjpKU1ZhbHVlKGludDMy
X3QgdGFnLCBpbnQzMl90IHBheWxvYWQpCisgICAgeworICAgICAgICB1LmFzQml0cy50YWcgPSB0
YWc7CisgICAgICAgIHUuYXNCaXRzLnBheWxvYWQgPSBwYXlsb2FkOworICAgIH0KKyNlbmRpZgor
CisgICAgaW5saW5lIGJvb2wgSlNWYWx1ZTo6aXNOdW1iZXIoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGlzSW50MzIoKSB8fCBpc0RvdWJsZSgpOworICAgIH0KKworICAgIGlubGluZSBi
b29sIEpTVmFsdWU6OmlzQm9vbGVhbigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNU
cnVlKCkgfHwgaXNGYWxzZSgpOworICAgIH0KKworICAgIGlubGluZSBib29sIEpTVmFsdWU6OmFz
Qm9vbGVhbigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNCb29sZWFuKCkpOworICAg
ICAgICByZXR1cm4gcGF5bG9hZCgpOworICAgIH0KKworI2Vsc2UgLy8gIVVTRShKU1ZBTFVFMzJf
NjQpIGkuZS4gVVNFKEpTVkFMVUU2NCkKKworICAgIC8vIDB4MCBjYW4gbmV2ZXIgb2NjdXIgbmF0
dXJhbGx5IGJlY2F1c2UgaXQgaGFzIGEgdGFnIG9mIDAwLCBpbmRpY2F0aW5nIGEgcG9pbnRlciB2
YWx1ZSwgYnV0IGEgcGF5bG9hZCBvZiAweDAsIHdoaWNoIGlzIGluIHRoZSAoaW52YWxpZCkgemVy
byBwYWdlLgorICAgIGlubGluZSBKU1ZhbHVlOjpKU1ZhbHVlKCkKKyAgICB7CisgICAgICAgIHUu
YXNJbnQ2NCA9IFZhbHVlRW1wdHk7CisgICAgfQorCisgICAgLy8gMHg0IGNhbiBuZXZlciBvY2N1
ciBuYXR1cmFsbHkgYmVjYXVzZSBpdCBoYXMgYSB0YWcgb2YgMDAsIGluZGljYXRpbmcgYSBwb2lu
dGVyIHZhbHVlLCBidXQgYSBwYXlsb2FkIG9mIDB4NCwgd2hpY2ggaXMgaW4gdGhlIChpbnZhbGlk
KSB6ZXJvIHBhZ2UuCisgICAgaW5saW5lIEpTVmFsdWU6OkpTVmFsdWUoSGFzaFRhYmxlRGVsZXRl
ZFZhbHVlVGFnKQorICAgIHsKKyAgICAgICAgdS5hc0ludDY0ID0gVmFsdWVEZWxldGVkOworICAg
IH0KKworICAgIGlubGluZSBKU1ZhbHVlOjpKU1ZhbHVlKEpTQ2VsbCogcHRyKQorICAgIHsKKyAg
ICAgICAgdS5hc0ludDY0ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHB0cik7CisgICAg
fQorCisgICAgaW5saW5lIEpTVmFsdWU6OkpTVmFsdWUoY29uc3QgSlNDZWxsKiBwdHIpCisgICAg
eworICAgICAgICB1LmFzSW50NjQgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oY29uc3Rf
Y2FzdDxKU0NlbGwqPihwdHIpKTsKKyAgICB9CisKKyAgICBpbmxpbmUgSlNWYWx1ZTo6b3BlcmF0
b3IgYm9vbCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdS5hc0ludDY0OworICAgIH0K
KworICAgIGlubGluZSBib29sIEpTVmFsdWU6Om9wZXJhdG9yPT0oY29uc3QgSlNWYWx1ZSYgb3Ro
ZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdS5hc0ludDY0ID09IG90aGVyLnUuYXNJ
bnQ2NDsKKyAgICB9CisKKyAgICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjpvcGVyYXRvciE9KGNvbnN0
IEpTVmFsdWUmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHUuYXNJbnQ2NCAh
PSBvdGhlci51LmFzSW50NjQ7CisgICAgfQorCisgICAgaW5saW5lIGJvb2wgSlNWYWx1ZTo6aXNF
bXB0eSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdS5hc0ludDY0ID09IFZhbHVlRW1w
dHk7CisgICAgfQorCisgICAgaW5saW5lIGJvb2wgSlNWYWx1ZTo6aXNVbmRlZmluZWQoKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIGFzVmFsdWUoKSA9PSBKU1ZhbHVlKEpTVW5kZWZpbmVk
KTsKKyAgICB9CisKKyAgICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjppc051bGwoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIGFzVmFsdWUoKSA9PSBKU1ZhbHVlKEpTTnVsbCk7CisgICAgfQor
CisgICAgaW5saW5lIGJvb2wgSlNWYWx1ZTo6aXNUcnVlKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBhc1ZhbHVlKCkgPT0gSlNWYWx1ZShKU1RydWUpOworICAgIH0KKworICAgIGlubGlu
ZSBib29sIEpTVmFsdWU6OmlzRmFsc2UoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGFz
VmFsdWUoKSA9PSBKU1ZhbHVlKEpTRmFsc2UpOworICAgIH0KKworICAgIGlubGluZSBib29sIEpT
VmFsdWU6OmFzQm9vbGVhbigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNCb29sZWFu
KCkpOworICAgICAgICByZXR1cm4gYXNWYWx1ZSgpID09IEpTVmFsdWUoSlNUcnVlKTsKKyAgICB9
CisKKyAgICBpbmxpbmUgaW50MzJfdCBKU1ZhbHVlOjphc0ludDMyKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChpc0ludDMyKCkpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50
MzJfdD4odS5hc0ludDY0KTsKKyAgICB9CisKKyAgICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjppc0Rv
dWJsZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNOdW1iZXIoKSAmJiAhaXNJbnQz
MigpOworICAgIH0KKworICAgIGlubGluZSBKU1ZhbHVlOjpKU1ZhbHVlKEpTTnVsbFRhZykKKyAg
ICB7CisgICAgICAgIHUuYXNJbnQ2NCA9IFZhbHVlTnVsbDsKKyAgICB9CisgICAgCisgICAgaW5s
aW5lIEpTVmFsdWU6OkpTVmFsdWUoSlNVbmRlZmluZWRUYWcpCisgICAgeworICAgICAgICB1LmFz
SW50NjQgPSBWYWx1ZVVuZGVmaW5lZDsKKyAgICB9CisKKyAgICBpbmxpbmUgSlNWYWx1ZTo6SlNW
YWx1ZShKU1RydWVUYWcpCisgICAgeworICAgICAgICB1LmFzSW50NjQgPSBWYWx1ZVRydWU7Cisg
ICAgfQorCisgICAgaW5saW5lIEpTVmFsdWU6OkpTVmFsdWUoSlNGYWxzZVRhZykKKyAgICB7Cisg
ICAgICAgIHUuYXNJbnQ2NCA9IFZhbHVlRmFsc2U7CisgICAgfQorCisgICAgaW5saW5lIGJvb2wg
SlNWYWx1ZTo6aXNVbmRlZmluZWRPck51bGwoKSBjb25zdAorICAgIHsKKyAgICAgICAgLy8gVW5k
ZWZpbmVkIGFuZCBudWxsIHNoYXJlIHRoZSBzYW1lIHZhbHVlLCBiYXIgdGhlICd1bmRlZmluZWQn
IGJpdCBpbiB0aGUgZXh0ZW5kZWQgdGFnLgorICAgICAgICByZXR1cm4gKHUuYXNJbnQ2NCAmIH5U
YWdCaXRVbmRlZmluZWQpID09IFZhbHVlTnVsbDsKKyAgICB9CisKKyAgICBpbmxpbmUgYm9vbCBK
U1ZhbHVlOjppc0Jvb2xlYW4oKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICh1LmFzSW50
NjQgJiB+MSkgPT0gVmFsdWVGYWxzZTsKKyAgICB9CisKKyAgICBpbmxpbmUgYm9vbCBKU1ZhbHVl
Ojppc0NlbGwoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEodS5hc0ludDY0ICYgVGFn
TWFzayk7CisgICAgfQorCisgICAgaW5saW5lIGJvb2wgSlNWYWx1ZTo6aXNJbnQzMigpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gKHUuYXNJbnQ2NCAmIFRhZ1R5cGVOdW1iZXIpID09IFRh
Z1R5cGVOdW1iZXI7CisgICAgfQorCisgICAgaW5saW5lIGludDY0X3QgcmVpbnRlcnByZXREb3Vi
bGVUb0ludDY0KGRvdWJsZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nh
c3Q8aW50NjRfdD4odmFsdWUpOworICAgIH0KKyAgICBpbmxpbmUgZG91YmxlIHJlaW50ZXJwcmV0
SW50NjRUb0RvdWJsZShpbnQ2NF90IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJpdHdp
c2VfY2FzdDxkb3VibGU+KHZhbHVlKTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIEpTVmFs
dWU6OkpTVmFsdWUoRW5jb2RlQXNEb3VibGVUYWcsIGRvdWJsZSBkKQorICAgIHsKKyAgICAgICAg
dS5hc0ludDY0ID0gcmVpbnRlcnByZXREb3VibGVUb0ludDY0KGQpICsgRG91YmxlRW5jb2RlT2Zm
c2V0OworICAgIH0KKworICAgIGlubGluZSBKU1ZhbHVlOjpKU1ZhbHVlKGludCBpKQorICAgIHsK
KyAgICAgICAgdS5hc0ludDY0ID0gVGFnVHlwZU51bWJlciB8IHN0YXRpY19jYXN0PHVpbnQzMl90
PihpKTsKKyAgICB9CisKKyAgICBpbmxpbmUgZG91YmxlIEpTVmFsdWU6OmFzRG91YmxlKCkgY29u
c3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0RvdWJsZSgpKTsKKyAgICAgICAgcmV0dXJuIHJl
aW50ZXJwcmV0SW50NjRUb0RvdWJsZSh1LmFzSW50NjQgLSBEb3VibGVFbmNvZGVPZmZzZXQpOwor
ICAgIH0KKworICAgIGlubGluZSBib29sIEpTVmFsdWU6OmlzTnVtYmVyKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiB1LmFzSW50NjQgJiBUYWdUeXBlTnVtYmVyOworICAgIH0KKworICAg
IEFMV0FZU19JTkxJTkUgSlNDZWxsKiBKU1ZhbHVlOjphc0NlbGwoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgQVNTRVJUKGlzQ2VsbCgpKTsKKyAgICAgICAgcmV0dXJuIHUucHRyOworICAgIH0KKwor
I2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpCisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYg
Ly8gSlNWYWx1ZUlubGluZU1ldGhvZHNfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNWYWx1ZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1ZhbHVlSW5saW5lcy5oCShyZXZpc2lvbiAxMzM5NTUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yMyw4ICsyMyw4IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVmIEpTVmFsdWVJ
bmxpbmVNZXRob2RzX2gKLSNkZWZpbmUgSlNWYWx1ZUlubGluZU1ldGhvZHNfaAorI2lmbmRlZiBK
U1ZhbHVlSW5saW5lc19oCisjZGVmaW5lIEpTVmFsdWVJbmxpbmVzX2gKIAogI2luY2x1ZGUgIkpT
VmFsdWUuaCIKIApAQCAtNDkzLDQgKzQ5Myw1IEBAIG5hbWVzcGFjZSBKU0MgewogCiB9IC8vIG5h
bWVzcGFjZSBKU0MKIAotI2VuZGlmIC8vIEpTVmFsdWVJbmxpbmVNZXRob2RzX2gKKyNlbmRpZiAv
LyBKU1ZhbHVlSW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0xpdGVyYWxQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0xpdGVyYWxQYXJzZXIuY3BwCShyZXZpc2lvbiAxMzM5NjUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9MaXRlcmFsUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjcsOCArMjcsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkxpdGVyYWxQYXJz
ZXIuaCIKIAotI2luY2x1ZGUgIkJ1dHRlcmZseUlubGluZU1ldGhvZHMuaCIKLSNpbmNsdWRlICJD
b3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJCdXR0ZXJmbHlJbmxpbmVzLmgi
CisjaW5jbHVkZSAiQ29waWVkU3BhY2VJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNBcnJheS5oIgog
I2luY2x1ZGUgIkpTU3RyaW5nLmgiCiAjaW5jbHVkZSAiTGV4ZXIuaCIKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHAJKHJl
dmlzaW9uIDEzMzk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdENv
bnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEsOCArMjEsOCBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgiCiAKLSNpbmNsdWRlICJC
dXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgiCi0jaW5jbHVkZSAiQ29waWVkU3BhY2VJbmxpbmVNZXRo
b2RzLmgiCisjaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lcy5oIgorI2luY2x1ZGUgIkNvcGllZFNw
YWNlSW5saW5lcy5oIgogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uSGVs
cGVycy5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL09wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9PcGVyYXRpb25zLmgJKHJldmlzaW9uIDEzMzk2NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjYs
NyArMjYsNyBAQAogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCiAjaW5jbHVkZSAiSlNQcm94eS5o
IgogI2luY2x1ZGUgIkpTU3RyaW5nLmgiCi0jaW5jbHVkZSAiSlNWYWx1ZUlubGluZU1ldGhvZHMu
aCIKKyNpbmNsdWRlICJKU1ZhbHVlSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBNYXRjaGVz
QXJyYXkuY3BwCShyZXZpc2lvbiAxMzM5NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9SZWdFeHBNYXRjaGVzQXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUmVnRXhwTWF0Y2hlc0FycmF5Lmgi
CiAKLSNpbmNsdWRlICJCdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiQnV0dGVy
Zmx5SW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuY3BwCShyZXZpc2lvbiAxMzM5NjUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMSw4ICsyMSw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
UmVnRXhwT2JqZWN0LmgiCiAKLSNpbmNsdWRlICJCdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgiCi0j
aW5jbHVkZSAiQ29waWVkU3BhY2VJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiQnV0dGVyZmx5
SW5saW5lcy5oIgorI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lcy5oIgogI2luY2x1ZGUgIkVy
cm9yLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uSGVscGVycy5oIgogI2luY2x1ZGUgIkpTQXJyYXku
aCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJv
dG90eXBlLmNwcAkocmV2aXNpb24gMTMzOTY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsOSArMjIsOSBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlN0cmluZ1Byb3RvdHlwZS5oIgogCi0j
aW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkJ1dHRlcmZseUlu
bGluZXMuaCIKICNpbmNsdWRlICJDYWNoZWRDYWxsLmgiCi0jaW5jbHVkZSAiQ29waWVkU3BhY2VJ
bmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiQ29waWVkU3BhY2VJbmxpbmVzLmgiCiAjaW5jbHVk
ZSAiRXJyb3IuaCIKICNpbmNsdWRlICJFeGVjdXRhYmxlLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxP
YmplY3RGdW5jdGlvbnMuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMzk3MSkKKysrIFNv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMxIEBACisy
MDEyLTExLTA4ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBSZW5h
bWVkIC4uLklubGluZU1ldGhvZHMuaCBmaWxlcyB0byAuLi5JbmxpbmVzLmguCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDExNDUuCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBpcyBvbmx5IGEgcmVm
YWN0b3JpbmcgZWZmb3J0IHRvIHJlbmFtZSB0aGUgZmlsZXMuIFRoZXJlIGFyZSBubworICAgICAg
ICBmdW5jdGlvbmFsaXR5IGNoYW5nZXMuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLgorCisgICAg
ICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAg
ICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJv
ajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAg
ICogaHRtbC9wYXJzZXIvSFRNTEVudGl0eVBhcnNlci5jcHA6CisgICAgICAgICogaHRtbC9wYXJz
ZXIvSFRNTFRva2VuaXplci5jcHA6CisgICAgICAgICogaHRtbC90cmFjay9XZWJWVFRUb2tlbml6
ZXIuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9MYXlvdXRUeXBlc0lubGluZXMuaDogQ29waWVk
IGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFR5cGVzSW5saW5lTWV0aG9kcy5o
LgorICAgICAgICAqIHhtbC9wYXJzZXIvQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VySW5saW5lTWV0
aG9kcy5oOiBSZW1vdmVkLgorICAgICAgICAqIHhtbC9wYXJzZXIvQ2hhcmFjdGVyUmVmZXJlbmNl
UGFyc2VySW5saW5lcy5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL0No
YXJhY3RlclJlZmVyZW5jZVBhcnNlcklubGluZU1ldGhvZHMuaC4KKyAgICAgICAgKiB4bWwvcGFy
c2VyL01hcmt1cFRva2VuaXplcklubGluZU1ldGhvZHMuaDogUmVtb3ZlZC4KKyAgICAgICAgKiB4
bWwvcGFyc2VyL01hcmt1cFRva2VuaXplcklubGluZXMuaDogQ29waWVkIGZyb20gU291cmNlL1dl
YkNvcmUveG1sL3BhcnNlci9NYXJrdXBUb2tlbml6ZXJJbmxpbmVNZXRob2RzLmguCisgICAgICAg
ICogeG1sL3BhcnNlci9YTUxDaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXIuY3BwOgorICAgICAgICAq
IHhtbC9wYXJzZXIvWE1MVG9rZW5pemVyLmNwcDoKKwogMjAxMi0xMS0wOCAgQW5kcmVhcyBLbGlu
ZyAgPGtsaW5nQHdlYmtpdC5vcmc+CiAKICAgICAgICAgRG9jdW1lbnRMb2FkZXI6IFNocmluay10
by1maXQgdGhlIFJlc291cmNlUmVzcG9uc2UgdmVjdG9yIGFmdGVyIGxvYWRpbmcgY29tcGxldGVz
LgpJbmRleDogU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiAxMzM5NjUpCisr
KyBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC01
ODI0LDEwICs1ODI0LDEwIEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUv
d29ya2Vycy9Xb3JrZXJTY3JpcHRMb2FkZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvd29ya2Vycy9X
b3JrZXJUaHJlYWQuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlclRocmVhZC5o
IFwKLQlTb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL0NoYXJhY3RlclJlZmVyZW5jZVBhcnNlcklu
bGluZU1ldGhvZHMuaCBcCisJU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9DaGFyYWN0ZXJSZWZl
cmVuY2VQYXJzZXJJbmxpbmVzLmggXAogCVNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvTWFya3Vw
VG9rZW5CYXNlLmggXAogCVNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvTWFya3VwVG9rZW5pemVy
QmFzZS5oIFwKLQlTb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL01hcmt1cFRva2VuaXplcklubGlu
ZU1ldGhvZHMuaCBcCisJU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9NYXJrdXBUb2tlbml6ZXJJ
bmxpbmVzLmggXAogCVNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvTmV3WE1MRG9jdW1lbnRQYXJz
ZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL05ld1hNTERvY3VtZW50UGFyc2Vy
LmggXAogCVNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MQ2hhcmFjdGVyUmVmZXJlbmNlUGFy
c2VyLmNwcCBcCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkJKHJldmlzaW9uIDEzMzk2NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL1RhcmdldC5wcmkJKHdvcmtpbmcgY29weSkKQEAgLTI3MzYsMTAgKzI3MzYsMTAgQEAg
SEVBREVSUyArPSBcCiAgICAgd29ya2Vycy9Xb3JrZXJSdW5Mb29wLmggXAogICAgIHdvcmtlcnMv
V29ya2VyU2NyaXB0TG9hZGVyLmggXAogICAgIHdvcmtlcnMvV29ya2VyVGhyZWFkLmggXAotICAg
IHhtbC9wYXJzZXIvQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VySW5saW5lTWV0aG9kcy5oIFwKKyAg
ICB4bWwvcGFyc2VyL0NoYXJhY3RlclJlZmVyZW5jZVBhcnNlcklubGluZXMuaCBcCiAgICAgeG1s
L3BhcnNlci9NYXJrdXBUb2tlbkJhc2UuaCBcCiAgICAgeG1sL3BhcnNlci9NYXJrdXBUb2tlbml6
ZXJCYXNlLmggXAotICAgIHhtbC9wYXJzZXIvTWFya3VwVG9rZW5pemVySW5saW5lTWV0aG9kcy5o
IFwKKyAgICB4bWwvcGFyc2VyL01hcmt1cFRva2VuaXplcklubGluZXMuaCBcCiAgICAgeG1sL3Bh
cnNlci9OZXdYTUxEb2N1bWVudFBhcnNlci5oIFwKICAgICB4bWwvcGFyc2VyL1hNTENoYXJhY3Rl
clJlZmVyZW5jZVBhcnNlci5oIFwKICAgICB4bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyLmgg
XApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gMTMzOTY1KQorKysgU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC0zNjcwLDEwICszNjcwLDEwIEBACiAg
ICAgICAgICAgICAnd29ya2Vycy9Xb3JrZXJTY3JpcHRMb2FkZXIuaCcsCiAgICAgICAgICAgICAn
d29ya2Vycy9Xb3JrZXJTY3JpcHRMb2FkZXJDbGllbnQuaCcsCiAgICAgICAgICAgICAnd29ya2Vy
cy9Xb3JrZXJUaHJlYWQuY3BwJywKLSAgICAgICAgICAgICd4bWwvcGFyc2VyL0NoYXJhY3RlclJl
ZmVyZW5jZVBhcnNlcklubGluZU1ldGhvZHMuaCcsCisgICAgICAgICAgICAneG1sL3BhcnNlci9D
aGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXJJbmxpbmVzLmgnLAogICAgICAgICAgICAgJ3htbC9wYXJz
ZXIvTWFya3VwVG9rZW5CYXNlLmgnLAogICAgICAgICAgICAgJ3htbC9wYXJzZXIvTWFya3VwVG9r
ZW5pemVyQmFzZS5oJywKLSAgICAgICAgICAgICd4bWwvcGFyc2VyL01hcmt1cFRva2VuaXplcklu
bGluZU1ldGhvZHMuaCcsCisgICAgICAgICAgICAneG1sL3BhcnNlci9NYXJrdXBUb2tlbml6ZXJJ
bmxpbmVzLmgnLAogICAgICAgICAgICAgJ3htbC9wYXJzZXIvTmV3WE1MRG9jdW1lbnRQYXJzZXIu
Y3BwJywKICAgICAgICAgICAgICd4bWwvcGFyc2VyL05ld1hNTERvY3VtZW50UGFyc2VyLmgnLAog
ICAgICAgICAgICAgJ3htbC9wYXJzZXIvWE1MQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VyLmNwcCcs
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagko
cmV2aXNpb24gMTMzOTY1KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29y
ZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTQ4Mzk4LDcgKzQ4Mzk4LDcgQEAKIAkJCQlOYW1l
PSJwYXJzZXIiCiAJCQkJPgogCQkJCTxGaWxlCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5ceG1sXHBh
cnNlclxDaGFyYWN0ZXJSZWZlcmVuY2VJbmxpbmVNZXRob2RzLmgiCisJCQkJCVJlbGF0aXZlUGF0
aD0iLi5ceG1sXHBhcnNlclxDaGFyYWN0ZXJSZWZlcmVuY2VJbmxpbmVzLmgiCiAJCQkJCT4KIAkJ
CQk8L0ZpbGU+CiAJCQkJPEZpbGUKQEAgLTQ4NDEwLDcgKzQ4NDEwLDcgQEAKIAkJCQkJPgogCQkJ
CTwvRmlsZT4KIAkJCQk8RmlsZQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHhtbFxwYXJzZXJcTWFy
a3VwVG9rZW5pemVySW5saW5lTWV0aG9kcy5oIgorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHhtbFxw
YXJzZXJcTWFya3VwVG9rZW5pemVySW5saW5lcy5oIgogCQkJCQk+CiAJCQkJPC9GaWxlPgogCQkJ
CTxGaWxlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCShyZXZpc2lvbiAxMzM5NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcg
QEAKIC8qIEVuZCBQQlhBZ2dyZWdhdGVUYXJnZXQgc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhC
dWlsZEZpbGUgc2VjdGlvbiAqLwotCQkwMDAyMkU2OTEzQ0UxQkJBMDAyODJENUIgLyogQ2hhcmFj
dGVyUmVmZXJlbmNlUGFyc2VySW5saW5lTWV0aG9kcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDAwMjJFNjgxM0NFMUJCQTAwMjgyRDVCIC8qIENoYXJh
Y3RlclJlZmVyZW5jZVBhcnNlcklubGluZU1ldGhvZHMuaCAqLzsgfTsKKwkJMDAwMjJFNjkxM0NF
MUJCQTAwMjgyRDVCIC8qIENoYXJhY3RlclJlZmVyZW5jZVBhcnNlcklubGluZXMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDAwMDIyRTY4MTNDRTFCQkEw
MDI4MkQ1QiAvKiBDaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXJJbmxpbmVzLmggKi87IH07CiAJCTAw
MDJFQzU4MTNDM0Y2N0QwMDA0MEQ0NyAvKiBYTUxUb2tlbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDAwMkVDNTUxM0MzRjY3RDAwMDQwRDQ3IC8qIFhN
TFRva2VuLmggKi87IH07CiAJCTAwMDJFQzU5MTNDM0Y2N0QwMDA0MEQ0NyAvKiBYTUxUb2tlbml6
ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDAw
MkVDNTYxM0MzRjY3RDAwMDQwRDQ3IC8qIFhNTFRva2VuaXplci5jcHAgKi87IH07CiAJCTAwMDJF
QzVBMTNDM0Y2N0QwMDA0MEQ0NyAvKiBYTUxUb2tlbml6ZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDAwMDJFQzU3MTNDM0Y2N0QwMDA0MEQ0NyAvKiBY
TUxUb2tlbml6ZXIuaCAqLzsgfTsKQEAgLTYwLDcgKzYwLDcgQEAKIAkJMDBCOTMxODkxM0JBOERC
QzAwMzVBOTQ4IC8qIFhNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwMEI5MzE4MzEzQkE4NjdGMDAzNUE5NDgg
LyogWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcCAqLzsgfTsKIAkJMDBCOTMxOEIxM0JBOERD
OTAwMzVBOTQ4IC8qIFhNTERvY3VtZW50UGFyc2VyU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDBCOTMxODUxM0JBODY3RjAwMzVBOTQ4IC8q
IFhNTERvY3VtZW50UGFyc2VyU2NvcGUuY3BwICovOyB9OwogCQkwMEI5MzE4QzEzQkE4RENDMDAz
NUE5NDggLyogWE1MRG9jdW1lbnRQYXJzZXJTY29wZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDBCOTMxODYxM0JBODY3RjAwMzVBOTQ4IC8qIFhNTERv
Y3VtZW50UGFyc2VyU2NvcGUuaCAqLzsgfTsKLQkJMDBDNjBFM0YxM0Q3NkQ3RTAwOTJBMjc1IC8q
IE1hcmt1cFRva2VuaXplcklubGluZU1ldGhvZHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDAwQzYwRTNFMTNENzZEN0UwMDkyQTI3NSAvKiBNYXJrdXBU
b2tlbml6ZXJJbmxpbmVNZXRob2RzLmggKi87IH07CisJCTAwQzYwRTNGMTNENzZEN0UwMDkyQTI3
NSAvKiBNYXJrdXBUb2tlbml6ZXJJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwMEM2MEUzRTEzRDc2RDdFMDA5MkEyNzUgLyogTWFya3VwVG9r
ZW5pemVySW5saW5lcy5oICovOyB9OwogCQkwMEM2MEU0MjEzRDc5N0FFMDA5MkEyNzUgLyogTWFy
a3VwVG9rZW5pemVyQmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMDBDNjBFNDExM0Q3OTdBRTAwOTJBMjc1IC8qIE1hcmt1cFRva2VuaXplckJhc2Uu
aCAqLzsgfTsKIAkJMDBDQTkzQjIxM0M2NjkxNjAwRjdGRTk1IC8qIE5ld1hNTERvY3VtZW50UGFy
c2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwMENB
OTNCMTEzQzY2OTE2MDBGN0ZFOTUgLyogTmV3WE1MRG9jdW1lbnRQYXJzZXIuaCAqLzsgfTsKIAkJ
MDBDQTkzQjUxM0M2Njk3QzAwRjdGRTk1IC8qIE5ld1hNTERvY3VtZW50UGFyc2VyLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDAwQ0E5M0I0MTNDNjY5
N0MwMEY3RkU5NSAvKiBOZXdYTUxEb2N1bWVudFBhcnNlci5jcHAgKi87IH07CkBAIC03MDk0LDcg
KzcwOTQsNyBAQAogLyogRW5kIFBCWENvcHlGaWxlc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwogCiAv
KiBCZWdpbiBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KLQkJMDAwMjJFNjgxM0NFMUJCQTAw
MjgyRDVCIC8qIENoYXJhY3RlclJlZmVyZW5jZVBhcnNlcklubGluZU1ldGhvZHMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VySW5saW5l
TWV0aG9kcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwMDAyMkU2ODEzQ0UxQkJB
MDAyODJENUIgLyogQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VySW5saW5lcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBDaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXJJbmxpbmVzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTAwMDJFQzU1MTNDM0Y2N0QwMDA0MEQ0NyAv
KiBYTUxUb2tlbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBYTUxUb2tlbi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwMDAyRUM1NjEzQzNGNjdEMDAwNDBENDcg
LyogWE1MVG9rZW5pemVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFhNTFRva2VuaXplci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTAwMDJFQzU3
MTNDM0Y2N0QwMDA0MEQ0NyAvKiBYTUxUb2tlbml6ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gWE1MVG9rZW5pemVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC03MTA5LDcgKzcxMDksNyBAQAogCQkwMEI5MzE4MzEzQkE4NjdGMDAzNUE5NDggLyogWE1MRG9j
dW1lbnRQYXJzZXJMaWJ4bWwyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFhNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTAwQjkzMTg1MTNCQTg2N0YwMDM1QTk0OCAvKiBYTUxEb2N1bWVudFBhcnNlclNjb3Bl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFhNTERvY3VtZW50UGFy
c2VyU2NvcGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwMEI5MzE4NjEzQkE4
NjdGMDAzNUE5NDggLyogWE1MRG9jdW1lbnRQYXJzZXJTY29wZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBYTUxEb2N1bWVudFBhcnNlclNjb3BlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTAwQzYwRTNFMTNENzZEN0UwMDkyQTI3NSAvKiBNYXJrdXBUb2tlbml6
ZXJJbmxpbmVNZXRob2RzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hcmt1
cFRva2VuaXplcklubGluZU1ldGhvZHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MDBDNjBFM0UxM0Q3NkQ3RTAwOTJBMjc1IC8qIE1hcmt1cFRva2VuaXplcklubGluZXMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFya3VwVG9rZW5pemVySW5saW5lcy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwMEM2MEU0MTEzRDc5N0FFMDA5MkEyNzUgLyog
TWFya3VwVG9rZW5pemVyQmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBN
YXJrdXBUb2tlbml6ZXJCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTAwQ0E5
M0IxMTNDNjY5MTYwMEY3RkU5NSAvKiBOZXdYTUxEb2N1bWVudFBhcnNlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBOZXdYTUxEb2N1bWVudFBhcnNlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwMENBOTNCNDEzQzY2OTdDMDBGN0ZFOTUgLyogTmV3WE1MRG9j
dW1lbnRQYXJzZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTmV3
WE1MRG9jdW1lbnRQYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTQx
MzksMTAgKzE0MTM5LDEwIEBACiAJCTAwQjkzMTgwMTNCQTg2N0YwMDM1QTk0OCAvKiBwYXJzZXIg
Ki8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTAwMDIyRTY4
MTNDRTFCQkEwMDI4MkQ1QiAvKiBDaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXJJbmxpbmVNZXRob2Rz
LmggKi8sCisJCQkJMDAwMjJFNjgxM0NFMUJCQTAwMjgyRDVCIC8qIENoYXJhY3RlclJlZmVyZW5j
ZVBhcnNlcklubGluZXMuaCAqLywKIAkJCQkwMEE2MjlDMDEzRDBCRUM3MDA1MEFDNTIgLyogTWFy
a3VwVG9rZW5CYXNlLmggKi8sCiAJCQkJMDBDNjBFNDExM0Q3OTdBRTAwOTJBMjc1IC8qIE1hcmt1
cFRva2VuaXplckJhc2UuaCAqLywKLQkJCQkwMEM2MEUzRTEzRDc2RDdFMDA5MkEyNzUgLyogTWFy
a3VwVG9rZW5pemVySW5saW5lTWV0aG9kcy5oICovLAorCQkJCTAwQzYwRTNFMTNENzZEN0UwMDky
QTI3NSAvKiBNYXJrdXBUb2tlbml6ZXJJbmxpbmVzLmggKi8sCiAJCQkJMDBDQTkzQjQxM0M2Njk3
QzAwRjdGRTk1IC8qIE5ld1hNTERvY3VtZW50UGFyc2VyLmNwcCAqLywKIAkJCQkwMENBOTNCMTEz
QzY2OTE2MDBGN0ZFOTUgLyogTmV3WE1MRG9jdW1lbnRQYXJzZXIuaCAqLywKIAkJCQkwMEQwNDY0
ODEzQzREMTQ1MDAzMjZGQ0MgLyogWE1MQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VyLmNwcCAqLywK
QEAgLTIyNTY4LDcgKzIyNTY4LDcgQEAKIAkJCQlGRDMxNUZGRjEyQjAyNjc2MDBDMUEzNTkgLyog
Q2hhbm5lbE1lcmdlck5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZEMzE2MDAyMTJCMDI2NzYw
MEMxQTM1OSAvKiBDaGFubmVsU3BsaXR0ZXJOb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQk2NTUw
QjZBMDA5OURGMDI3MDA5MEQ3ODEgLyogQ2hhcmFjdGVyRGF0YS5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJMDAwMjJFNjkxM0NFMUJCQTAwMjgyRDVCIC8qIENoYXJhY3RlclJlZmVyZW5jZVBhcnNlcklu
bGluZU1ldGhvZHMuaCBpbiBIZWFkZXJzICovLAorCQkJCTAwMDIyRTY5MTNDRTFCQkEwMDI4MkQ1
QiAvKiBDaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXJJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCMkMzREEyQTBEMDA2QzFEMDBFRjZGMjYgLyogQ2hhcnNldERhdGEuaCBpbiBIZWFkZXJzICov
LAogCQkJCUY1NUIzREIyMTI1MUYxMkQwMDNFRjI2OSAvKiBDaGVja2JveElucHV0VHlwZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTAwQjcyMUExMURFNjQyODAwOEFCOUZGIC8qIENoZWNrZWRJbnQu
aCBpbiBIZWFkZXJzICovLApAQCAtMjQ1MjQsNyArMjQ1MjQsNyBAQAogCQkJCTk3MjhDMzE0MTI2
OEU0MzkwMDQxRTg5QiAvKiBNYXJrdXBBY2N1bXVsYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MDBBNjI5QzExM0QwQkVDNzAwNTBBQzUyIC8qIE1hcmt1cFRva2VuQmFzZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMDBDNjBFNDIxM0Q3OTdBRTAwOTJBMjc1IC8qIE1hcmt1cFRva2VuaXplckJhc2Uu
aCBpbiBIZWFkZXJzICovLAotCQkJCTAwQzYwRTNGMTNENzZEN0UwMDkyQTI3NSAvKiBNYXJrdXBU
b2tlbml6ZXJJbmxpbmVNZXRob2RzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwMEM2MEUzRjEzRDc2
RDdFMDA5MkEyNzUgLyogTWFya3VwVG9rZW5pemVySW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJRkFCRTcyRjUxMDU5QzFFQjAwRDk5OUREIC8qIE1hdGhNTEVsZW1lbnQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTQ0QTI4QUFDMTJERkI4QUMwMEFFOTIzQiAvKiBNYXRoTUxFbGVtZW50RmFjdG9y
eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkFCRTcyRjcxMDU5QzFFQjAwRDk5OUREIC8qIE1hdGhN
TElubGluZUNvbnRhaW5lckVsZW1lbnQuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9wYXJzZXIvSFRNTEVudGl0eVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTEVudGl0eVBhcnNlci5jcHAJKHJldmlzaW9uIDEz
Mzk2NSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxFbnRpdHlQYXJzZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiSFRNTEVudGl0eVBhcnNlci5oIgogCi0jaW5jbHVkZSAiQ2hhcmFjdGVyUmVmZXJl
bmNlUGFyc2VySW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkNoYXJhY3RlclJlZmVyZW5jZVBh
cnNlcklubGluZXMuaCIKICNpbmNsdWRlICJIVE1MRW50aXR5U2VhcmNoLmgiCiAjaW5jbHVkZSAi
SFRNTEVudGl0eVRhYmxlLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgpJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRva2VuaXplci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRva2VuaXplci5jcHAJKHJl
dmlzaW9uIDEzMzk2NSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUb2tlbml6
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBACiAjaW5jbHVkZSAiSFRNTFRv
a2VuLmgiCiAjaW5jbHVkZSAiSFRNTFRyZWVCdWlsZGVyLmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVz
LmgiCi0jaW5jbHVkZSAiTWFya3VwVG9rZW5pemVySW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUg
Ik1hcmt1cFRva2VuaXplcklubGluZXMuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgog
I2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+CiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1dlYlZUVFRva2VuaXplci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9XZWJWVFRUb2tlbml6ZXIuY3Bw
CShyZXZpc2lvbiAxMzM5NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1dlYlZUVFRv
a2VuaXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAKIAogI2luY2x1ZGUg
IldlYlZUVFRva2VuaXplci5oIgogCi0jaW5jbHVkZSAiTWFya3VwVG9rZW5pemVySW5saW5lTWV0
aG9kcy5oIgorI2luY2x1ZGUgIk1hcmt1cFRva2VuaXplcklubGluZXMuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0VHlwZXNJ
bmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFR5
cGVzSW5saW5lcy5oCShyZXZpc2lvbiAxMzMzODkpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9MYXlvdXRUeXBlc0lubGluZU1ldGhvZHMuaDoxMzMzODkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvTGF5b3V0VHlwZXNJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRUeXBlc0lubGluZXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0VHlwZXNJbmxpbmVzLmgJKHJldmlzaW9u
IDEzMzM4OSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRUeXBlc0lubGluZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMjgsOCArMjgsOCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwog
Ci0jaWZuZGVmIExheW91dFR5cGVzSW5saW5lTWV0aG9kc19oCi0jZGVmaW5lIExheW91dFR5cGVz
SW5saW5lTWV0aG9kc19oCisjaWZuZGVmIExheW91dFR5cGVzSW5saW5lc19oCisjZGVmaW5lIExh
eW91dFR5cGVzSW5saW5lc19oCiAKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJG
cmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50LmgiCkBAIC0xNTAsNCArMTUwLDQgQEAgaW5saW5lIGJv
b2wgaXNJbnRlZ2VyVmFsdWUoY29uc3QgTGF5b3V0VQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKLSNlbmRpZiAvLyBMYXlvdXRUeXBlc0lubGluZU1ldGhvZHNfaAorI2VuZGlmIC8vIExheW91
dFR5cGVzSW5saW5lc19oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL0NoYXJhY3Rl
clJlZmVyZW5jZVBhcnNlcklubGluZU1ldGhvZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS94bWwvcGFyc2VyL0NoYXJhY3RlclJlZmVyZW5jZVBhcnNlcklubGluZU1ldGhvZHMuaAko
cmV2aXNpb24gMTMzOTY1KQorKysgU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9DaGFyYWN0ZXJS
ZWZlcmVuY2VQYXJzZXJJbmxpbmVNZXRob2RzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTczICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSwgSW5jLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lm
bmRlZiBDaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXJJbmxpbmVNZXRob2RzX2gKLSNkZWZpbmUgQ2hh
cmFjdGVyUmVmZXJlbmNlUGFyc2VySW5saW5lTWV0aG9kc19oCi0KLSNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdCdWlsZGVyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotaW5saW5lIGJvb2wg
aXNIZXhEaWdpdChVQ2hhciBjYykKLXsKLSAgICByZXR1cm4gKGNjID49ICcwJyAmJiBjYyA8PSAn
OScpIHx8IChjYyA+PSAnYScgJiYgY2MgPD0gJ2YnKSB8fCAoY2MgPj0gJ0EnICYmIGNjIDw9ICdG
Jyk7Ci19Ci0KLWlubGluZSB2b2lkIHVuY29uc3VtZUNoYXJhY3RlcnMoU2VnbWVudGVkU3RyaW5n
JiBzb3VyY2UsIGNvbnN0IFN0cmluZ0J1aWxkZXImIGNvbnN1bWVkQ2hhcmFjdGVycykKLXsKLSAg
ICBpZiAoY29uc3VtZWRDaGFyYWN0ZXJzLmxlbmd0aCgpID09IDEpCi0gICAgICAgIHNvdXJjZS5w
dXNoKGNvbnN1bWVkQ2hhcmFjdGVyc1swXSk7Ci0gICAgZWxzZSBpZiAoY29uc3VtZWRDaGFyYWN0
ZXJzLmxlbmd0aCgpID09IDIpIHsKLSAgICAgICAgc291cmNlLnB1c2goY29uc3VtZWRDaGFyYWN0
ZXJzWzBdKTsKLSAgICAgICAgc291cmNlLnB1c2goY29uc3VtZWRDaGFyYWN0ZXJzWzFdKTsKLSAg
ICB9IGVsc2UKLSAgICAgICAgc291cmNlLnByZXBlbmQoU2VnbWVudGVkU3RyaW5nKFN0cmluZyhj
b25zdW1lZENoYXJhY3RlcnMuY2hhcmFjdGVycygpLCBjb25zdW1lZENoYXJhY3RlcnMubGVuZ3Ro
KCkpKSk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBQYXJzZXJGdW5jdGlvbnM+Ci1ib29sIGNv
bnN1bWVDaGFyYWN0ZXJSZWZlcmVuY2UoU2VnbWVudGVkU3RyaW5nJiBzb3VyY2UsIFN0cmluZ0J1
aWxkZXImIGRlY29kZWRDaGFyYWN0ZXIsIGJvb2wmIG5vdEVub3VnaENoYXJhY3RlcnMsIFVDaGFy
IGFkZGl0aW9uYWxBbGxvd2VkQ2hhcmFjdGVyKQotewotICAgIEFTU0VSVCghYWRkaXRpb25hbEFs
bG93ZWRDaGFyYWN0ZXIgfHwgYWRkaXRpb25hbEFsbG93ZWRDaGFyYWN0ZXIgPT0gJyInIHx8IGFk
ZGl0aW9uYWxBbGxvd2VkQ2hhcmFjdGVyID09ICdcJycgfHwgYWRkaXRpb25hbEFsbG93ZWRDaGFy
YWN0ZXIgPT0gJz4nKTsKLSAgICBBU1NFUlQoIW5vdEVub3VnaENoYXJhY3RlcnMpOwotICAgIEFT
U0VSVChkZWNvZGVkQ2hhcmFjdGVyLmlzRW1wdHkoKSk7Ci0gICAgCi0gICAgZW51bSBFbnRpdHlT
dGF0ZSB7Ci0gICAgICAgIEluaXRpYWwsCi0gICAgICAgIE51bWJlciwKLSAgICAgICAgTWF5YmVI
ZXhMb3dlckNhc2VYLAotICAgICAgICBNYXliZUhleFVwcGVyQ2FzZVgsCi0gICAgICAgIEhleCwK
LSAgICAgICAgRGVjaW1hbCwKLSAgICAgICAgTmFtZWQKLSAgICB9OwotICAgIEVudGl0eVN0YXRl
IGVudGl0eVN0YXRlID0gSW5pdGlhbDsKLSAgICBVQ2hhcjMyIHJlc3VsdCA9IDA7Ci0gICAgU3Ry
aW5nQnVpbGRlciBjb25zdW1lZENoYXJhY3RlcnM7Ci0gICAgCi0gICAgd2hpbGUgKCFzb3VyY2Uu
aXNFbXB0eSgpKSB7Ci0gICAgICAgIFVDaGFyIGNjID0gc291cmNlLmN1cnJlbnRDaGFyKCk7Ci0g
ICAgICAgIHN3aXRjaCAoZW50aXR5U3RhdGUpIHsKLSAgICAgICAgY2FzZSBJbml0aWFsOiB7Ci0g
ICAgICAgICAgICBpZiAoY2MgPT0gJ1x4MDknIHx8IGNjID09ICdceDBBJyB8fCBjYyA9PSAnXHgw
QycgfHwgY2MgPT0gJyAnIHx8IGNjID09ICc8JyB8fCBjYyA9PSAnJicpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYgKGFkZGl0aW9uYWxBbGxvd2VkQ2hhcmFj
dGVyICYmIGNjID09IGFkZGl0aW9uYWxBbGxvd2VkQ2hhcmFjdGVyKQotICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmIChjYyA9PSAnIycpIHsKLSAgICAgICAgICAg
ICAgICBlbnRpdHlTdGF0ZSA9IE51bWJlcjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGlmICgoY2MgPj0gJ2EnICYmIGNjIDw9ICd6JykgfHwgKGNj
ID49ICdBJyAmJiBjYyA8PSAnWicpKSB7Ci0gICAgICAgICAgICAgICAgZW50aXR5U3RhdGUgPSBO
YW1lZDsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBjYXNlIE51bWJlcjogewotICAg
ICAgICAgICAgaWYgKGNjID09ICd4JykgewotICAgICAgICAgICAgICAgIGVudGl0eVN0YXRlID0g
TWF5YmVIZXhMb3dlckNhc2VYOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgaWYgKGNjID09ICdYJykgewotICAgICAgICAgICAgICAgIGVudGl0eVN0
YXRlID0gTWF5YmVIZXhVcHBlckNhc2VYOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgaWYgKGNjID49ICcwJyAmJiBjYyA8PSAnOScpIHsKLSAgICAg
ICAgICAgICAgICBlbnRpdHlTdGF0ZSA9IERlY2ltYWw7Ci0gICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzb3VyY2UucHVzaCgnIycpOwotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgTWF5YmVIZXhMb3dl
ckNhc2VYOiB7Ci0gICAgICAgICAgICBpZiAoaXNIZXhEaWdpdChjYykpIHsKLSAgICAgICAgICAg
ICAgICBlbnRpdHlTdGF0ZSA9IEhleDsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIHNvdXJjZS5wdXNoKCcjJyk7Ci0gICAgICAgICAgICBzb3Vy
Y2UucHVzaCgneCcpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAg
ICAgIGNhc2UgTWF5YmVIZXhVcHBlckNhc2VYOiB7Ci0gICAgICAgICAgICBpZiAoaXNIZXhEaWdp
dChjYykpIHsKLSAgICAgICAgICAgICAgICBlbnRpdHlTdGF0ZSA9IEhleDsKLSAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNvdXJjZS5wdXNoKCcj
Jyk7Ci0gICAgICAgICAgICBzb3VyY2UucHVzaCgnWCcpOwotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgSGV4OiB7Ci0gICAgICAgICAgICBpZiAoY2Mg
Pj0gJzAnICYmIGNjIDw9ICc5JykKLSAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQgKiAx
NiArIGNjIC0gJzAnOwotICAgICAgICAgICAgZWxzZSBpZiAoY2MgPj0gJ2EnICYmIGNjIDw9ICdm
JykKLSAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQgKiAxNiArIDEwICsgY2MgLSAnYSc7
Ci0gICAgICAgICAgICBlbHNlIGlmIChjYyA+PSAnQScgJiYgY2MgPD0gJ0YnKQotICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IHJlc3VsdCAqIDE2ICsgMTAgKyBjYyAtICdBJzsKLSAgICAgICAgICAg
IGVsc2UgaWYgKGNjID09ICc7JykgewotICAgICAgICAgICAgICAgIHNvdXJjZS5hZHZhbmNlQW5k
QVNTRVJUKGNjKTsKLSAgICAgICAgICAgICAgICBQYXJzZXJGdW5jdGlvbnM6OmNvbnZlcnRUb1VU
RjE2KFBhcnNlckZ1bmN0aW9uczo6bGVnYWxFbnRpdHlGb3IocmVzdWx0KSwgZGVjb2RlZENoYXJh
Y3Rlcik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9IGVsc2Ug
aWYgKFBhcnNlckZ1bmN0aW9uczo6YWNjZXB0TWFsZm9ybWVkKCkpIHsKLSAgICAgICAgICAgICAg
ICBQYXJzZXJGdW5jdGlvbnM6OmNvbnZlcnRUb1VURjE2KFBhcnNlckZ1bmN0aW9uczo6bGVnYWxF
bnRpdHlGb3IocmVzdWx0KSwgZGVjb2RlZENoYXJhY3Rlcik7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHVuY29uc3Vt
ZUNoYXJhY3RlcnMoc291cmNlLCBjb25zdW1lZENoYXJhY3RlcnMpOwotICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGNhc2UgRGVjaW1hbDogewotICAgICAgICAgICAgaWYgKGNjID49ICcwJyAm
JiBjYyA8PSAnOScpCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICogMTAgKyBjYyAt
ICcwJzsKLSAgICAgICAgICAgIGVsc2UgaWYgKGNjID09ICc7JykgewotICAgICAgICAgICAgICAg
IHNvdXJjZS5hZHZhbmNlQW5kQVNTRVJUKGNjKTsKLSAgICAgICAgICAgICAgICBQYXJzZXJGdW5j
dGlvbnM6OmNvbnZlcnRUb1VURjE2KFBhcnNlckZ1bmN0aW9uczo6bGVnYWxFbnRpdHlGb3IocmVz
dWx0KSwgZGVjb2RlZENoYXJhY3Rlcik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgICAgICB9IGVsc2UgaWYgKFBhcnNlckZ1bmN0aW9uczo6YWNjZXB0TWFsZm9ybWVkKCkp
IHsKLSAgICAgICAgICAgICAgICBQYXJzZXJGdW5jdGlvbnM6OmNvbnZlcnRUb1VURjE2KFBhcnNl
ckZ1bmN0aW9uczo6bGVnYWxFbnRpdHlGb3IocmVzdWx0KSwgZGVjb2RlZENoYXJhY3Rlcik7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgIHVuY29uc3VtZUNoYXJhY3RlcnMoc291cmNlLCBjb25zdW1lZENoYXJhY3RlcnMp
OwotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgTmFtZWQ6IHsKLSAgICAgICAgICAg
IHJldHVybiBQYXJzZXJGdW5jdGlvbnM6OmNvbnN1bWVOYW1lZEVudGl0eShzb3VyY2UsIGRlY29k
ZWRDaGFyYWN0ZXIsIG5vdEVub3VnaENoYXJhY3RlcnMsIGFkZGl0aW9uYWxBbGxvd2VkQ2hhcmFj
dGVyLCBjYyk7Ci0gICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBjb25zdW1lZENoYXJhY3Rl
cnMuYXBwZW5kKGNjKTsKLSAgICAgICAgc291cmNlLmFkdmFuY2VBbmRBU1NFUlQoY2MpOwotICAg
IH0KLSAgICBBU1NFUlQoc291cmNlLmlzRW1wdHkoKSk7Ci0gICAgbm90RW5vdWdoQ2hhcmFjdGVy
cyA9IHRydWU7Ci0gICAgdW5jb25zdW1lQ2hhcmFjdGVycyhzb3VyY2UsIGNvbnN1bWVkQ2hhcmFj
dGVycyk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi19Ci0KLSNlbmRpZiAvLyBDaGFyYWN0ZXJS
ZWZlcmVuY2VQYXJzZXJJbmxpbmVNZXRob2RzX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3htbC9w
YXJzZXIvQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VySW5saW5lcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VySW5saW5lcy5o
CShyZXZpc2lvbiAxMzMzODkpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvQ2hhcmFj
dGVyUmVmZXJlbmNlUGFyc2VySW5saW5lTWV0aG9kcy5oOjEzMzM4OSkKKysrIFNvdXJjZS9XZWJD
b3JlL3htbC9wYXJzZXIvQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VySW5saW5lcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxl
IEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUs
IEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VySW5saW5lTWV0
aG9kc19oCisjZGVmaW5lIENoYXJhY3RlclJlZmVyZW5jZVBhcnNlcklubGluZU1ldGhvZHNfaAor
CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2lubGluZSBib29sIGlzSGV4RGlnaXQoVUNoYXIgY2MpCit7CisgICAgcmV0dXJuIChj
YyA+PSAnMCcgJiYgY2MgPD0gJzknKSB8fCAoY2MgPj0gJ2EnICYmIGNjIDw9ICdmJykgfHwgKGNj
ID49ICdBJyAmJiBjYyA8PSAnRicpOworfQorCitpbmxpbmUgdm9pZCB1bmNvbnN1bWVDaGFyYWN0
ZXJzKFNlZ21lbnRlZFN0cmluZyYgc291cmNlLCBjb25zdCBTdHJpbmdCdWlsZGVyJiBjb25zdW1l
ZENoYXJhY3RlcnMpCit7CisgICAgaWYgKGNvbnN1bWVkQ2hhcmFjdGVycy5sZW5ndGgoKSA9PSAx
KQorICAgICAgICBzb3VyY2UucHVzaChjb25zdW1lZENoYXJhY3RlcnNbMF0pOworICAgIGVsc2Ug
aWYgKGNvbnN1bWVkQ2hhcmFjdGVycy5sZW5ndGgoKSA9PSAyKSB7CisgICAgICAgIHNvdXJjZS5w
dXNoKGNvbnN1bWVkQ2hhcmFjdGVyc1swXSk7CisgICAgICAgIHNvdXJjZS5wdXNoKGNvbnN1bWVk
Q2hhcmFjdGVyc1sxXSk7CisgICAgfSBlbHNlCisgICAgICAgIHNvdXJjZS5wcmVwZW5kKFNlZ21l
bnRlZFN0cmluZyhTdHJpbmcoY29uc3VtZWRDaGFyYWN0ZXJzLmNoYXJhY3RlcnMoKSwgY29uc3Vt
ZWRDaGFyYWN0ZXJzLmxlbmd0aCgpKSkpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgUGFyc2Vy
RnVuY3Rpb25zPgorYm9vbCBjb25zdW1lQ2hhcmFjdGVyUmVmZXJlbmNlKFNlZ21lbnRlZFN0cmlu
ZyYgc291cmNlLCBTdHJpbmdCdWlsZGVyJiBkZWNvZGVkQ2hhcmFjdGVyLCBib29sJiBub3RFbm91
Z2hDaGFyYWN0ZXJzLCBVQ2hhciBhZGRpdGlvbmFsQWxsb3dlZENoYXJhY3RlcikKK3sKKyAgICBB
U1NFUlQoIWFkZGl0aW9uYWxBbGxvd2VkQ2hhcmFjdGVyIHx8IGFkZGl0aW9uYWxBbGxvd2VkQ2hh
cmFjdGVyID09ICciJyB8fCBhZGRpdGlvbmFsQWxsb3dlZENoYXJhY3RlciA9PSAnXCcnIHx8IGFk
ZGl0aW9uYWxBbGxvd2VkQ2hhcmFjdGVyID09ICc+Jyk7CisgICAgQVNTRVJUKCFub3RFbm91Z2hD
aGFyYWN0ZXJzKTsKKyAgICBBU1NFUlQoZGVjb2RlZENoYXJhY3Rlci5pc0VtcHR5KCkpOworICAg
IAorICAgIGVudW0gRW50aXR5U3RhdGUgeworICAgICAgICBJbml0aWFsLAorICAgICAgICBOdW1i
ZXIsCisgICAgICAgIE1heWJlSGV4TG93ZXJDYXNlWCwKKyAgICAgICAgTWF5YmVIZXhVcHBlckNh
c2VYLAorICAgICAgICBIZXgsCisgICAgICAgIERlY2ltYWwsCisgICAgICAgIE5hbWVkCisgICAg
fTsKKyAgICBFbnRpdHlTdGF0ZSBlbnRpdHlTdGF0ZSA9IEluaXRpYWw7CisgICAgVUNoYXIzMiBy
ZXN1bHQgPSAwOworICAgIFN0cmluZ0J1aWxkZXIgY29uc3VtZWRDaGFyYWN0ZXJzOworICAgIAor
ICAgIHdoaWxlICghc291cmNlLmlzRW1wdHkoKSkgeworICAgICAgICBVQ2hhciBjYyA9IHNvdXJj
ZS5jdXJyZW50Q2hhcigpOworICAgICAgICBzd2l0Y2ggKGVudGl0eVN0YXRlKSB7CisgICAgICAg
IGNhc2UgSW5pdGlhbDogeworICAgICAgICAgICAgaWYgKGNjID09ICdceDA5JyB8fCBjYyA9PSAn
XHgwQScgfHwgY2MgPT0gJ1x4MEMnIHx8IGNjID09ICcgJyB8fCBjYyA9PSAnPCcgfHwgY2MgPT0g
JyYnKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmIChhZGRp
dGlvbmFsQWxsb3dlZENoYXJhY3RlciAmJiBjYyA9PSBhZGRpdGlvbmFsQWxsb3dlZENoYXJhY3Rl
cikKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAoY2MgPT0g
JyMnKSB7CisgICAgICAgICAgICAgICAgZW50aXR5U3RhdGUgPSBOdW1iZXI7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoKGNjID49ICdhJyAm
JiBjYyA8PSAneicpIHx8IChjYyA+PSAnQScgJiYgY2MgPD0gJ1onKSkgeworICAgICAgICAgICAg
ICAgIGVudGl0eVN0YXRlID0gTmFtZWQ7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAg
Y2FzZSBOdW1iZXI6IHsKKyAgICAgICAgICAgIGlmIChjYyA9PSAneCcpIHsKKyAgICAgICAgICAg
ICAgICBlbnRpdHlTdGF0ZSA9IE1heWJlSGV4TG93ZXJDYXNlWDsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjYyA9PSAnWCcpIHsKKyAgICAg
ICAgICAgICAgICBlbnRpdHlTdGF0ZSA9IE1heWJlSGV4VXBwZXJDYXNlWDsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjYyA+PSAnMCcgJiYg
Y2MgPD0gJzknKSB7CisgICAgICAgICAgICAgICAgZW50aXR5U3RhdGUgPSBEZWNpbWFsOworICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc291cmNl
LnB1c2goJyMnKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAg
ICBjYXNlIE1heWJlSGV4TG93ZXJDYXNlWDogeworICAgICAgICAgICAgaWYgKGlzSGV4RGlnaXQo
Y2MpKSB7CisgICAgICAgICAgICAgICAgZW50aXR5U3RhdGUgPSBIZXg7CisgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzb3VyY2UucHVzaCgnIycp
OworICAgICAgICAgICAgc291cmNlLnB1c2goJ3gnKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorICAgICAgICBjYXNlIE1heWJlSGV4VXBwZXJDYXNlWDogeworICAgICAg
ICAgICAgaWYgKGlzSGV4RGlnaXQoY2MpKSB7CisgICAgICAgICAgICAgICAgZW50aXR5U3RhdGUg
PSBIZXg7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBzb3VyY2UucHVzaCgnIycpOworICAgICAgICAgICAgc291cmNlLnB1c2goJ1gnKTsKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEhleDogewor
ICAgICAgICAgICAgaWYgKGNjID49ICcwJyAmJiBjYyA8PSAnOScpCisgICAgICAgICAgICAgICAg
cmVzdWx0ID0gcmVzdWx0ICogMTYgKyBjYyAtICcwJzsKKyAgICAgICAgICAgIGVsc2UgaWYgKGNj
ID49ICdhJyAmJiBjYyA8PSAnZicpCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICog
MTYgKyAxMCArIGNjIC0gJ2EnOworICAgICAgICAgICAgZWxzZSBpZiAoY2MgPj0gJ0EnICYmIGNj
IDw9ICdGJykKKyAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQgKiAxNiArIDEwICsgY2Mg
LSAnQSc7CisgICAgICAgICAgICBlbHNlIGlmIChjYyA9PSAnOycpIHsKKyAgICAgICAgICAgICAg
ICBzb3VyY2UuYWR2YW5jZUFuZEFTU0VSVChjYyk7CisgICAgICAgICAgICAgICAgUGFyc2VyRnVu
Y3Rpb25zOjpjb252ZXJ0VG9VVEYxNihQYXJzZXJGdW5jdGlvbnM6OmxlZ2FsRW50aXR5Rm9yKHJl
c3VsdCksIGRlY29kZWRDaGFyYWN0ZXIpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICAgICAgfSBlbHNlIGlmIChQYXJzZXJGdW5jdGlvbnM6OmFjY2VwdE1hbGZvcm1lZCgp
KSB7CisgICAgICAgICAgICAgICAgUGFyc2VyRnVuY3Rpb25zOjpjb252ZXJ0VG9VVEYxNihQYXJz
ZXJGdW5jdGlvbnM6OmxlZ2FsRW50aXR5Rm9yKHJlc3VsdCksIGRlY29kZWRDaGFyYWN0ZXIpOwor
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICB1bmNvbnN1bWVDaGFyYWN0ZXJzKHNvdXJjZSwgY29uc3VtZWRDaGFyYWN0ZXJz
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIERlY2ltYWw6IHsKKyAgICAgICAg
ICAgIGlmIChjYyA+PSAnMCcgJiYgY2MgPD0gJzknKQorICAgICAgICAgICAgICAgIHJlc3VsdCA9
IHJlc3VsdCAqIDEwICsgY2MgLSAnMCc7CisgICAgICAgICAgICBlbHNlIGlmIChjYyA9PSAnOycp
IHsKKyAgICAgICAgICAgICAgICBzb3VyY2UuYWR2YW5jZUFuZEFTU0VSVChjYyk7CisgICAgICAg
ICAgICAgICAgUGFyc2VyRnVuY3Rpb25zOjpjb252ZXJ0VG9VVEYxNihQYXJzZXJGdW5jdGlvbnM6
OmxlZ2FsRW50aXR5Rm9yKHJlc3VsdCksIGRlY29kZWRDaGFyYWN0ZXIpOworICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfSBlbHNlIGlmIChQYXJzZXJGdW5jdGlvbnM6
OmFjY2VwdE1hbGZvcm1lZCgpKSB7CisgICAgICAgICAgICAgICAgUGFyc2VyRnVuY3Rpb25zOjpj
b252ZXJ0VG9VVEYxNihQYXJzZXJGdW5jdGlvbnM6OmxlZ2FsRW50aXR5Rm9yKHJlc3VsdCksIGRl
Y29kZWRDaGFyYWN0ZXIpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB1bmNvbnN1bWVDaGFyYWN0ZXJzKHNvdXJjZSwg
Y29uc3VtZWRDaGFyYWN0ZXJzKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIE5h
bWVkOiB7CisgICAgICAgICAgICByZXR1cm4gUGFyc2VyRnVuY3Rpb25zOjpjb25zdW1lTmFtZWRF
bnRpdHkoc291cmNlLCBkZWNvZGVkQ2hhcmFjdGVyLCBub3RFbm91Z2hDaGFyYWN0ZXJzLCBhZGRp
dGlvbmFsQWxsb3dlZENoYXJhY3RlciwgY2MpOworICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgY29uc3VtZWRDaGFyYWN0ZXJzLmFwcGVuZChjYyk7CisgICAgICAgIHNvdXJjZS5hZHZhbmNl
QW5kQVNTRVJUKGNjKTsKKyAgICB9CisgICAgQVNTRVJUKHNvdXJjZS5pc0VtcHR5KCkpOworICAg
IG5vdEVub3VnaENoYXJhY3RlcnMgPSB0cnVlOworICAgIHVuY29uc3VtZUNoYXJhY3RlcnMoc291
cmNlLCBjb25zdW1lZENoYXJhY3RlcnMpOworICAgIHJldHVybiBmYWxzZTsKK30KKworfQorCisj
ZW5kaWYgLy8gQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VySW5saW5lTWV0aG9kc19oCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL0NoYXJhY3RlclJlZmVyZW5jZVBhcnNlcklubGluZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL0NoYXJhY3RlclJlZmVy
ZW5jZVBhcnNlcklubGluZXMuaAkocmV2aXNpb24gMTMzMzg5KQorKysgU291cmNlL1dlYkNvcmUv
eG1sL3BhcnNlci9DaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI0LDggKzI0LDggQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYgQ2hh
cmFjdGVyUmVmZXJlbmNlUGFyc2VySW5saW5lTWV0aG9kc19oCi0jZGVmaW5lIENoYXJhY3RlclJl
ZmVyZW5jZVBhcnNlcklubGluZU1ldGhvZHNfaAorI2lmbmRlZiBDaGFyYWN0ZXJSZWZlcmVuY2VQ
YXJzZXJJbmxpbmVzX2gKKyNkZWZpbmUgQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VySW5saW5lc19o
CiAKICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKQEAgLTE3MCw0ICsxNzAs
NCBAQCBib29sIGNvbnN1bWVDaGFyYWN0ZXJSZWZlcmVuY2UoU2VnbWVudGVkCiAKIH0KIAotI2Vu
ZGlmIC8vIENoYXJhY3RlclJlZmVyZW5jZVBhcnNlcklubGluZU1ldGhvZHNfaAorI2VuZGlmIC8v
IENoYXJhY3RlclJlZmVyZW5jZVBhcnNlcklubGluZXNfaApJbmRleDogU291cmNlL1dlYkNvcmUv
eG1sL3BhcnNlci9NYXJrdXBUb2tlbml6ZXJJbmxpbmVNZXRob2RzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9NYXJrdXBUb2tlbml6ZXJJbmxpbmVNZXRob2RzLmgJ
KHJldmlzaW9uIDEzMzk2NSkKKysrIFNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvTWFya3VwVG9r
ZW5pemVySW5saW5lTWV0aG9kcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDk1ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1vYmlsZSwgSW5jLiBodHRwOi8vd3d3LnRvcmNo
bW9iaWxlLmNvbS8KLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUsIEluYy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2lmbmRlZiBNYXJrdXBUb2tlbml6ZXJJbmxpbmVNZXRob2RzX2gKLSNkZWZpbmUgTWFya3VwVG9r
ZW5pemVySW5saW5lTWV0aG9kc19oCi0KLSNpbmNsdWRlICJTZWdtZW50ZWRTdHJpbmcuaCIKLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1pbmxpbmUgYm9vbCBpc1Rva2VuaXplcldoaXRlc3BhY2Uo
VUNoYXIgY2MpCi17Ci0gICAgcmV0dXJuIGNjID09ICcgJyB8fCBjYyA9PSAnXHgwQScgfHwgY2Mg
PT0gJ1x4MDknIHx8IGNjID09ICdceDBDJzsKLX0KLQotaW5saW5lIHZvaWQgYWR2YW5jZVN0cmlu
Z0FuZEFTU0VSVElnbm9yaW5nQ2FzZShTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSwgY29uc3QgY2hh
ciogZXhwZWN0ZWRDaGFyYWN0ZXJzKQotewotICAgIHdoaWxlICgqZXhwZWN0ZWRDaGFyYWN0ZXJz
KQotICAgICAgICBzb3VyY2UuYWR2YW5jZUFuZEFTU0VSVElnbm9yaW5nQ2FzZSgqZXhwZWN0ZWRD
aGFyYWN0ZXJzKyspOwotfQotCi1pbmxpbmUgdm9pZCBhZHZhbmNlU3RyaW5nQW5kQVNTRVJUKFNl
Z21lbnRlZFN0cmluZyYgc291cmNlLCBjb25zdCBjaGFyKiBleHBlY3RlZENoYXJhY3RlcnMpCi17
Ci0gICAgd2hpbGUgKCpleHBlY3RlZENoYXJhY3RlcnMpCi0gICAgICAgIHNvdXJjZS5hZHZhbmNl
QW5kQVNTRVJUKCpleHBlY3RlZENoYXJhY3RlcnMrKyk7Ci19Ci0KLSNpZiBDT01QSUxFUihNU1ZD
KQotLy8gV2UgbmVlZCB0byBkaXNhYmxlIHRoZSAidW5yZWFjaGFibGUgY29kZSIgd2FybmluZyBi
ZWNhdXNlIHdlIHdhbnQgdG8gYXNzZXJ0Ci0vLyB0aGF0IHNvbWUgY29kZSBwb2ludHMgYXJlbid0
IHJlYWNoZWQgaW4gdGhlIHN0YXRlIG1hY2hpbmUuCi0jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTog
NDcwMikKLSNlbmRpZgotCi0jZGVmaW5lIEJFR0lOX1NUQVRFKHByZWZpeCwgc3RhdGVOYW1lKSBj
YXNlIHByZWZpeDo6c3RhdGVOYW1lOiBzdGF0ZU5hbWU6Ci0jZGVmaW5lIEVORF9TVEFURSgpIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOyBicmVhazsKLQotLy8gV2UgdXNlIHRoaXMgbWFjcm8gd2hlbiB0
aGUgSFRNTDUgc3BlYyBzYXlzICJyZWNvbnN1bWUgdGhlIGN1cnJlbnQgaW5wdXQKLS8vIGNoYXJh
Y3RlciBpbiB0aGUgPG11bWJsZT4gc3RhdGUuIgotI2RlZmluZSBSRUNPTlNVTUVfSU4ocHJlZml4
LCBzdGF0ZU5hbWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGRv
IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgICAgICBtX3N0YXRlID0gcHJlZml4OjpzdGF0ZU5hbWU7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBnb3RvIHN0YXRlTmFt
ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgIH0gd2hpbGUgKGZhbHNlKQotCi0vLyBXZSB1c2UgdGhpcyBtYWNybyB3aGVuIHRoZSBIVE1M
NSBzcGVjIHNheXMgImNvbnN1bWUgdGhlIG5leHQgaW5wdXQKLS8vIGNoYXJhY3RlciAuLi4gYW5k
IHN3aXRjaCB0byB0aGUgPG11bWJsZT4gc3RhdGUuIgotI2RlZmluZSBBRFZBTkNFX1RPKHByZWZp
eCwgc3RhdGVOYW1lKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
IGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgICAgICBtX3N0YXRlID0gcHJlZml4OjpzdGF0ZU5hbWU7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBpZiAoIW1faW5w
dXRTdHJlYW1QcmVwcm9jZXNzb3IuYWR2YW5jZShzb3VyY2UpKSAgICAgICAgICAgICAgICAgICAg
XAotICAgICAgICAgICAgcmV0dXJuIGhhdmVCdWZmZXJlZENoYXJhY3RlclRva2VuKCk7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBjYyA9IG1faW5wdXRTdHJlYW1QcmVwcm9j
ZXNzb3IubmV4dElucHV0Q2hhcmFjdGVyKCk7ICAgICAgICAgICAgICAgXAotICAgICAgICBnb3Rv
IHN0YXRlTmFtZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgIH0gd2hpbGUgKGZhbHNlKQotCi0vLyBTb21ldGltZXMgdGhlcmUncyBtb3Jl
IGNvbXBsaWNhdGVkIGxvZ2ljIGluIHRoZSBzcGVjIHRoYXQgc2VwYXJhdGVzIHdoZW4KLS8vIHdl
IGNvbnN1bWUgdGhlIG5leHQgaW5wdXQgY2hhcmFjdGVyIGFuZCB3aGVuIHdlIHN3aXRjaCB0byBh
IHBhcnRpY3VsYXIKLS8vIHN0YXRlLiBXZSBoYW5kbGUgdGhvc2UgY2FzZXMgYnkgYWR2YW5jaW5n
IHRoZSBzb3VyY2UgZGlyZWN0bHkgYW5kIHVzaW5nCi0vLyB0aGlzIG1hY3JvIHRvIHN3aXRjaCB0
byB0aGUgaW5kaWNhdGVkIHN0YXRlLgotI2RlZmluZSBTV0lUQ0hfVE8ocHJlZml4LCBzdGF0ZU5h
bWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGRvIHsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgICAgICBtX3N0YXRlID0gcHJlZml4OjpzdGF0ZU5hbWU7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBpZiAoc291cmNlLmlzRW1wdHko
KSB8fCAhbV9pbnB1dFN0cmVhbVByZXByb2Nlc3Nvci5wZWVrKHNvdXJjZSkpICAgXAotICAgICAg
ICAgICAgcmV0dXJuIGhhdmVCdWZmZXJlZENoYXJhY3RlclRva2VuKCk7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgICAgICBjYyA9IG1faW5wdXRTdHJlYW1QcmVwcm9jZXNzb3IubmV4
dElucHV0Q2hhcmFjdGVyKCk7ICAgICAgICAgICAgICAgXAotICAgICAgICBnb3RvIHN0YXRlTmFt
ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgIH0gd2hpbGUgKGZhbHNlKQotCi19Ci0KLSNlbmRpZiAvLyBNYXJrdXBUb2tlbml6ZXJJbmxp
bmVNZXRob2RzX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvTWFya3VwVG9rZW5p
emVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvTWFy
a3VwVG9rZW5pemVySW5saW5lcy5oCShyZXZpc2lvbiAxMzMzODkpCShmcm9tIFNvdXJjZS9XZWJD
b3JlL3htbC9wYXJzZXIvTWFya3VwVG9rZW5pemVySW5saW5lTWV0aG9kcy5oOjEzMzM4OSkKKysr
IFNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvTWFya3VwVG9rZW5pemVySW5saW5lcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBw
bGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IFRvcmNo
IE1vYmlsZSwgSW5jLiBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAqIENvcHlyaWdodCAo
QykgMjAxMCBHb29nbGUsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBNYXJrdXBUb2tlbml6ZXJJbmxp
bmVNZXRob2RzX2gKKyNkZWZpbmUgTWFya3VwVG9rZW5pemVySW5saW5lTWV0aG9kc19oCisKKyNp
bmNsdWRlICJTZWdtZW50ZWRTdHJpbmcuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitpbmxp
bmUgYm9vbCBpc1Rva2VuaXplcldoaXRlc3BhY2UoVUNoYXIgY2MpCit7CisgICAgcmV0dXJuIGNj
ID09ICcgJyB8fCBjYyA9PSAnXHgwQScgfHwgY2MgPT0gJ1x4MDknIHx8IGNjID09ICdceDBDJzsK
K30KKworaW5saW5lIHZvaWQgYWR2YW5jZVN0cmluZ0FuZEFTU0VSVElnbm9yaW5nQ2FzZShTZWdt
ZW50ZWRTdHJpbmcmIHNvdXJjZSwgY29uc3QgY2hhciogZXhwZWN0ZWRDaGFyYWN0ZXJzKQorewor
ICAgIHdoaWxlICgqZXhwZWN0ZWRDaGFyYWN0ZXJzKQorICAgICAgICBzb3VyY2UuYWR2YW5jZUFu
ZEFTU0VSVElnbm9yaW5nQ2FzZSgqZXhwZWN0ZWRDaGFyYWN0ZXJzKyspOworfQorCitpbmxpbmUg
dm9pZCBhZHZhbmNlU3RyaW5nQW5kQVNTRVJUKFNlZ21lbnRlZFN0cmluZyYgc291cmNlLCBjb25z
dCBjaGFyKiBleHBlY3RlZENoYXJhY3RlcnMpCit7CisgICAgd2hpbGUgKCpleHBlY3RlZENoYXJh
Y3RlcnMpCisgICAgICAgIHNvdXJjZS5hZHZhbmNlQW5kQVNTRVJUKCpleHBlY3RlZENoYXJhY3Rl
cnMrKyk7Cit9CisKKyNpZiBDT01QSUxFUihNU1ZDKQorLy8gV2UgbmVlZCB0byBkaXNhYmxlIHRo
ZSAidW5yZWFjaGFibGUgY29kZSIgd2FybmluZyBiZWNhdXNlIHdlIHdhbnQgdG8gYXNzZXJ0Cisv
LyB0aGF0IHNvbWUgY29kZSBwb2ludHMgYXJlbid0IHJlYWNoZWQgaW4gdGhlIHN0YXRlIG1hY2hp
bmUuCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDcwMikKKyNlbmRpZgorCisjZGVmaW5lIEJF
R0lOX1NUQVRFKHByZWZpeCwgc3RhdGVOYW1lKSBjYXNlIHByZWZpeDo6c3RhdGVOYW1lOiBzdGF0
ZU5hbWU6CisjZGVmaW5lIEVORF9TVEFURSgpIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyBicmVhazsK
KworLy8gV2UgdXNlIHRoaXMgbWFjcm8gd2hlbiB0aGUgSFRNTDUgc3BlYyBzYXlzICJyZWNvbnN1
bWUgdGhlIGN1cnJlbnQgaW5wdXQKKy8vIGNoYXJhY3RlciBpbiB0aGUgPG11bWJsZT4gc3RhdGUu
IgorI2RlZmluZSBSRUNPTlNVTUVfSU4ocHJlZml4LCBzdGF0ZU5hbWUpICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBtX3N0
YXRlID0gcHJlZml4OjpzdGF0ZU5hbWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgICAgICBnb3RvIHN0YXRlTmFtZTsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKGZhbHNlKQorCisvLyBX
ZSB1c2UgdGhpcyBtYWNybyB3aGVuIHRoZSBIVE1MNSBzcGVjIHNheXMgImNvbnN1bWUgdGhlIG5l
eHQgaW5wdXQKKy8vIGNoYXJhY3RlciAuLi4gYW5kIHN3aXRjaCB0byB0aGUgPG11bWJsZT4gc3Rh
dGUuIgorI2RlZmluZSBBRFZBTkNFX1RPKHByZWZpeCwgc3RhdGVOYW1lKSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBt
X3N0YXRlID0gcHJlZml4OjpzdGF0ZU5hbWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgICAgICBpZiAoIW1faW5wdXRTdHJlYW1QcmVwcm9jZXNzb3IuYWR2YW5j
ZShzb3VyY2UpKSAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgcmV0dXJuIGhhdmVC
dWZmZXJlZENoYXJhY3RlclRva2VuKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
ICAgICBjYyA9IG1faW5wdXRTdHJlYW1QcmVwcm9jZXNzb3IubmV4dElucHV0Q2hhcmFjdGVyKCk7
ICAgICAgICAgICAgICAgXAorICAgICAgICBnb3RvIHN0YXRlTmFtZTsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKGZhbHNl
KQorCisvLyBTb21ldGltZXMgdGhlcmUncyBtb3JlIGNvbXBsaWNhdGVkIGxvZ2ljIGluIHRoZSBz
cGVjIHRoYXQgc2VwYXJhdGVzIHdoZW4KKy8vIHdlIGNvbnN1bWUgdGhlIG5leHQgaW5wdXQgY2hh
cmFjdGVyIGFuZCB3aGVuIHdlIHN3aXRjaCB0byBhIHBhcnRpY3VsYXIKKy8vIHN0YXRlLiBXZSBo
YW5kbGUgdGhvc2UgY2FzZXMgYnkgYWR2YW5jaW5nIHRoZSBzb3VyY2UgZGlyZWN0bHkgYW5kIHVz
aW5nCisvLyB0aGlzIG1hY3JvIHRvIHN3aXRjaCB0byB0aGUgaW5kaWNhdGVkIHN0YXRlLgorI2Rl
ZmluZSBTV0lUQ0hfVE8ocHJlZml4LCBzdGF0ZU5hbWUpICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBtX3N0YXRlID0g
cHJlZml4OjpzdGF0ZU5hbWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgICAgICBpZiAoc291cmNlLmlzRW1wdHkoKSB8fCAhbV9pbnB1dFN0cmVhbVByZXByb2Nl
c3Nvci5wZWVrKHNvdXJjZSkpICAgXAorICAgICAgICAgICAgcmV0dXJuIGhhdmVCdWZmZXJlZENo
YXJhY3RlclRva2VuKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBjYyA9
IG1faW5wdXRTdHJlYW1QcmVwcm9jZXNzb3IubmV4dElucHV0Q2hhcmFjdGVyKCk7ICAgICAgICAg
ICAgICAgXAorICAgICAgICBnb3RvIHN0YXRlTmFtZTsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKGZhbHNlKQorCit9CisK
KyNlbmRpZiAvLyBNYXJrdXBUb2tlbml6ZXJJbmxpbmVNZXRob2RzX2gKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3htbC9wYXJzZXIvTWFya3VwVG9rZW5pemVySW5saW5lcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvTWFya3VwVG9rZW5pemVySW5saW5lcy5oCShyZXZp
c2lvbiAxMzMzODkpCisrKyBTb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL01hcmt1cFRva2VuaXpl
cklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsOCArMjUsOCBAQAogICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KICAqLwogCi0jaWZuZGVmIE1hcmt1cFRva2VuaXplcklubGluZU1ldGhvZHNfaAotI2RlZmlu
ZSBNYXJrdXBUb2tlbml6ZXJJbmxpbmVNZXRob2RzX2gKKyNpZm5kZWYgTWFya3VwVG9rZW5pemVy
SW5saW5lc19oCisjZGVmaW5lIE1hcmt1cFRva2VuaXplcklubGluZXNfaAogCiAjaW5jbHVkZSAi
U2VnbWVudGVkU3RyaW5nLmgiCiAKQEAgLTkyLDQgKzkyLDQgQEAgaW5saW5lIHZvaWQgYWR2YW5j
ZVN0cmluZ0FuZEFTU0VSVChTZWdtZQogCiB9CiAKLSNlbmRpZiAvLyBNYXJrdXBUb2tlbml6ZXJJ
bmxpbmVNZXRob2RzX2gKKyNlbmRpZiAvLyBNYXJrdXBUb2tlbml6ZXJJbmxpbmVzX2gKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTENoYXJhY3RlclJl
ZmVyZW5jZVBhcnNlci5jcHAJKHJldmlzaW9uIDEzMzk2NSkKKysrIFNvdXJjZS9XZWJDb3JlL3ht
bC9wYXJzZXIvWE1MQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzAsNyArMzAsNyBAQAogCiB1c2luZyBuYW1lc3BhY2UgV1RGOwogCi0jaW5jbHVkZSAiQ2hh
cmFjdGVyUmVmZXJlbmNlUGFyc2VySW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkNoYXJhY3Rl
clJlZmVyZW5jZVBhcnNlcklubGluZXMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTFRva2VuaXplci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxUb2tlbml6ZXIuY3BwCShyZXZpc2lvbiAx
MzM5NjUpCisrKyBTb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTFRva2VuaXplci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJYTUxUb2tlbml6ZXIuaCIKIAotI2luY2x1ZGUgIk1hcmt1cFRva2VuaXplcklubGluZU1l
dGhvZHMuaCIKKyNpbmNsdWRlICJNYXJrdXBUb2tlbml6ZXJJbmxpbmVzLmgiCiAjaW5jbHVkZSAi
Tm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJYTUxDaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXIu
aCIKICNpbmNsdWRlICJYTUxUb2tlbi5oIgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>173147</attachid>
            <date>2012-11-08 16:48:11 -0800</date>
            <delta_ts>2012-11-08 17:21:48 -0800</delta_ts>
            <desc>svn up&apos;ed again.</desc>
            <filename>bug-101145.patch</filename>
            <type>text/plain</type>
            <size>259412</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTMzOTczKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcyIEBA
CisyMDEyLTExLTA4ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBS
ZW5hbWVkIC4uLklubGluZU1ldGhvZHMuaCBmaWxlcyB0byAuLi5JbmxpbmVzLmguCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDExNDUuCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBpcyBvbmx5IGEg
cmVmYWN0b3JpbmcgZWZmb3J0IHRvIHJlbmFtZSB0aGUgZmlsZXMuIFRoZXJlIGFyZSBubworICAg
ICAgICBmdW5jdGlvbmFsaXR5IGNoYW5nZXMuCisKKyAgICAgICAgKiBBUEkvSlNPYmplY3RSZWYu
Y3BwOgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogSmF2YVNjcmlw
dENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvajoKKyAgICAg
ICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuY3Bw
OgorICAgICAgICAqIGhlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwOgorICAgICAgICAqIGhlYXAv
Q29waWVkQmxvY2suaDoKKyAgICAgICAgKiBoZWFwL0NvcGllZFNwYWNlLmNwcDoKKyAgICAgICAg
KiBoZWFwL0NvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oOiBSZW1vdmVkLgorICAgICAgICAqIGhl
YXAvQ29waWVkU3BhY2VJbmxpbmVzLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0NvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oLgorICAgICAgICAqIGhlYXAvQ29weVZp
c2l0b3IuY3BwOgorICAgICAgICAqIGhlYXAvQ29weVZpc2l0b3JJbmxpbmVNZXRob2RzLmg6IFJl
bW92ZWQuCisgICAgICAgICogaGVhcC9Db3B5VmlzaXRvcklubGluZXMuaDogQ29waWVkIGZyb20g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVZpc2l0b3JJbmxpbmVNZXRob2RzLmguCisg
ICAgICAgICogaGVhcC9HQ1RocmVhZC5jcHA6CisgICAgICAgICogaGVhcC9HQ1RocmVhZFNoYXJl
ZERhdGEuY3BwOgorICAgICAgICAqIGhlYXAvSGFuZGxlU3RhY2suY3BwOgorICAgICAgICAqIGhl
YXAvSGVhcC5jcHA6CisgICAgICAgICogaGVhcC9IZWFwUm9vdFZpc2l0b3IuaDoKKyAgICAgICAg
KiBoZWFwL01hcmtTdGFjay5jcHA6CisgICAgICAgICogaGVhcC9NYXJrU3RhY2tJbmxpbmVNZXRo
b2RzLmg6IFJlbW92ZWQuCisgICAgICAgICogaGVhcC9NYXJrU3RhY2tJbmxpbmVzLmg6IENvcGll
ZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFja0lubGluZU1ldGhvZHMu
aC4KKyAgICAgICAgKiBoZWFwL1Nsb3RWaXNpdG9yLmNwcDoKKyAgICAgICAgKiBoZWFwL1Nsb3RW
aXNpdG9yLmg6CisgICAgICAgICogaGVhcC9TbG90VmlzaXRvcklubGluZU1ldGhvZHMuaDogUmVt
b3ZlZC4KKyAgICAgICAgKiBoZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oOiBDb3BpZWQgZnJvbSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklubGluZU1ldGhvZHMuaC4KKyAg
ICAgICAgKiBqaXQvSG9zdENhbGxSZXR1cm5WYWx1ZS5jcHA6CisgICAgICAgICogaml0L0pJVC5j
cHA6CisgICAgICAgICogaml0L0pJVEFyaXRobWV0aWMuY3BwOgorICAgICAgICAqIGppdC9KSVRB
cml0aG1ldGljMzJfNjQuY3BwOgorICAgICAgICAqIGppdC9KSVRDYWxsLmNwcDoKKyAgICAgICAg
KiBqaXQvSklUQ2FsbDMyXzY0LmNwcDoKKyAgICAgICAgKiBqaXQvSklUSW5saW5lTWV0aG9kcy5o
OiBSZW1vdmVkLgorICAgICAgICAqIGppdC9KSVRJbmxpbmVzLmg6IENvcGllZCBmcm9tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lTWV0aG9kcy5oLgorICAgICAgICAqIGppdC9K
SVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKiBqaXQvSklUT3Bjb2RlczMyXzY0LmNwcDoKKyAgICAg
ICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0
eUFjY2VzczMyXzY0LmNwcDoKKyAgICAgICAgKiBqc2MuY3BwOgorICAgICAgICAqIHJ1bnRpbWUv
QXJyYXlDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgICogcnVudGltZS9BcnJheVByb3RvdHlwZS5j
cHA6CisgICAgICAgICogcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmg6IFJlbW92ZWQu
CisgICAgICAgICogcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVzLmg6IENvcGllZCBmcm9tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGluZU1ldGhvZHMuaC4KKyAgICAg
ICAgKiBydW50aW1lL0luZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oOiBSZW1vdmVkLgorICAg
ICAgICAqIHJ1bnRpbWUvSW5kZXhpbmdIZWFkZXJJbmxpbmVzLmg6IENvcGllZCBmcm9tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oLgor
ICAgICAgICAqIHJ1bnRpbWUvSlNBY3RpdmF0aW9uLmg6CisgICAgICAgICogcnVudGltZS9KU0Fy
cmF5LmNwcDoKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuaDoKKyAgICAgICAgKiBydW50aW1l
L0pTQ2VsbC5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuY3BwOgorICAgICAgICAqIHJ1
bnRpbWUvSlNWYWx1ZUlubGluZU1ldGhvZHMuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBydW50aW1l
L0pTVmFsdWVJbmxpbmVzLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTVmFsdWVJbmxpbmVNZXRob2RzLmguCisgICAgICAgICogcnVudGltZS9MaXRlcmFsUGFy
c2VyLmNwcDoKKyAgICAgICAgKiBydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmNwcDoKKyAgICAg
ICAgKiBydW50aW1lL09wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cE1hdGNo
ZXNBcnJheS5jcHA6CisgICAgICAgICogcnVudGltZS9SZWdFeHBPYmplY3QuY3BwOgorICAgICAg
ICAqIHJ1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcDoKKwogMjAxMi0xMS0wNyAgRmlsaXAgUGl6
bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIERGRyBjb25zdGFudCBmb2xkaW5nIGFu
ZCBDRkcgc2ltcGxpZmljYXRpb24gc2hvdWxkIGJlIHNtYXJ0IGVub3VnaCB0byBrbm93IHRoYXQg
aWYgYSBsb2dpY2FsIG9wJ3Mgb3BlcmFuZCBpcyBwcm92ZW4gdG8gaGF2ZSBhIG5vbi1tYXNxdWVy
YWRpbmcgc3RydWN0dXJlIHRoZW4gaXQgYWx3YXlzIGV2YWx1YXRlcyB0byB0cnVlCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24gMTMzOTcz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHdvcmtpbmcg
Y29weSkKQEAgLTI1Niw5ICsyNTYsOSBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRCbG9jay5oIFwKIAlTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZS5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0NvcGllZFNwYWNlLmggXAotCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNw
YWNlSW5saW5lTWV0aG9kcy5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRT
cGFjZUlubGluZXMuaCBcCiAgICAgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVZpc2l0
b3IuaCBcCi0gICAgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVZpc2l0b3JJbmxpbmVN
ZXRob2RzLmggXAorICAgIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlWaXNpdG9ySW5s
aW5lcy5oIFwKICAgICBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5VmlzaXRvci5jcHAg
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NhcmRTZXQuaCBcCiAJU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwIFwKQEAgLTI3Niw3ICsyNzYsNyBA
QCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9JbmNyZW1lbnRhbFN3ZWVwZXIuY3BwIFwKICAgICBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9TbG90VmlzaXRvci5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNp
dG9yLmggXAotCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lTWV0
aG9kcy5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklubGluZXMu
aCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlU3RhY2suY3BwIFwKIAlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5kbGVTdGFjay5oIFwKIAlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IYW5kbGVUeXBlcy5oIFwKQEAgLTI5OSw3ICsyOTksNyBAQCBqYXZhc2NyaXB0
Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3Rh
Y2tNYXJrZXIuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmNwcCBc
CiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmggXAotICAgIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFja0lubGluZU1ldGhvZHMuaCBcCisgICAgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrSW5saW5lcy5oIFwKIAlTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwUm9vdFZpc2l0b3IuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2VkQWxsb2NhdG9yLmggXApAQCAtNDAwLDcgKzQwMCw3IEBAIGphdmFzY3JpcHRjb3JlX3Nv
dXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmggXAogCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklURXhjZXB0aW9ucy5oIFwKLQlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VElubGluZU1ldGhvZHMuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVz
LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcCBcCiAJ
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcCBcCiAJU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcCBcCkBAIC00ODMsNyArNDgz
LDcgQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQm9vbGVhbk9iamVjdC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Cb29sZWFuUHJvdG90eXBlLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Qm9vbGVhblByb3RvdHlwZS5oIFwKLQlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0
ZXJmbHlJbmxpbmVNZXRob2RzLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1
dHRlcmZseUlubGluZXMuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVy
Zmx5LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFRyYW5zY2VuZGVu
dGFsRnVuY3Rpb24uaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FsbERhdGEu
Y3BwIFwKQEAgLTUzMSw3ICs1MzEsNyBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuaCBcCiAJU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0lkZW50aWZpZXIuaCBcCi0JU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0luZGV4aW5nSGVhZGVySW5saW5lcy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbmRleGluZ0hlYWRlci5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbmRleGluZ1R5cGUuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bmRleGluZ1R5cGUuaCBcCkBAIC01OTIsNyArNTkyLDcgQEAgamF2YXNjcmlwdGNvcmVfc291cmNl
cyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlSW5mby5oIFwKIAlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlLmNwcCBcCiAJU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5oIFwKLQlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1ZhbHVlSW5saW5lTWV0aG9kcy5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1ZhbHVlSW5saW5lcy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1ZhcmlhYmxlT2JqZWN0LmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNW
YXJpYWJsZU9iamVjdC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dpdGhT
Y29wZS5oIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAxMzM5NzMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsMTAgKzIy
LDEwIEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKIAotI2luY2x1ZGUgIkJ1dHRlcmZseUlubGlu
ZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJCdXR0ZXJmbHlJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQnl0
ZWNvZGVHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJDb21wbGV0aW9uLmgiCi0jaW5jbHVkZSAiQ29w
aWVkU3BhY2VJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiQ29waWVkU3BhY2VJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiRXhjZXB0aW9uSGVscGVycy5oIgogI2luY2x1ZGUgIkhlYXBTdGF0aXN0aWNz
LmgiCiAjaW5jbHVkZSAiSW5pdGlhbGl6ZVRocmVhZGluZy5oIgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9KU09iamVjdFJlZi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9KU09iamVjdFJlZi5jcHAJKHJldmlzaW9uIDEzMzk3MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNPYmplY3RSZWYuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSw5ICsyOSw5IEBACiAjaW5jbHVkZSAiSlNPYmplY3RSZWZQcml2YXRlLmgiCiAKICNpbmNsdWRl
ICJBUElDYXN0LmgiCi0jaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oIgorI2luY2x1
ZGUgIkJ1dHRlcmZseUlubGluZXMuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKLSNpbmNsdWRl
ICJDb3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGlu
ZXMuaCIKICNpbmNsdWRlICJEYXRlQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJFcnJvckNvbnN0
cnVjdG9yLmgiCiAjaW5jbHVkZSAiRnVuY3Rpb25Db25zdHJ1Y3Rvci5oIgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oJ
KHJldmlzaW9uIDEzMzk3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC01MzgsNyArNTM4LDcgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJ
CVJlbGF0aXZlUGF0aD0iLi5cLi5ccnVudGltZVxCdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgiCisJ
CQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxydW50aW1lXEJ1dHRlcmZseUlubGluZXMuaCIKIAkJCQk+
CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQpAQCAtNTQ2LDcgKzU0Niw3IEBACiAJCQkJPgogCQkJPC9G
aWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHJ1bnRpbWVcSW5kZXhpbmdI
ZWFkZXJJbmxpbmVNZXRob2RzLmgiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxydW50aW1lXElu
ZGV4aW5nSGVhZGVySW5saW5lcy5oIgogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCkBAIC0x
MDEwLDcgKzEwMTAsNyBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRp
dmVQYXRoPSIuLlwuLlxydW50aW1lXEpTVmFsdWVJbmxpbmVNZXRob2RzLmgiCisJCQkJUmVsYXRp
dmVQYXRoPSIuLlwuLlxydW50aW1lXEpTVmFsdWVJbmxpbmVzLmgiCiAJCQkJPgogCQkJPC9GaWxl
PgogCQkJPEZpbGUKQEAgLTE5ODYsNyArMTk4Niw3IEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJ
PEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGppdFxKSVRJbmxpbmVNZXRob2RzLmgiCisJ
CQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxqaXRcSklUSW5saW5lcy5oIgogCQkJCT4KIAkJCTwvRmls
ZT4KIAkJCTxGaWxlCkBAIC0yMzYyLDcgKzIzNjIsNyBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJ
CTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxoZWFwXENvcGllZFNwYWNlSW5saW5lTWV0
aG9kcy5oIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5caGVhcFxDb3BpZWRTcGFjZUlubGluZXMu
aCIKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQpAQCAtMjM3NCw3ICsyMzc0LDcgQEAKIAkJ
CQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5caGVhcFxD
b3B5VmlzaXRvcklubGluZU1ldGhvZHMuaCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGhlYXBc
Q29weVZpc2l0b3JJbmxpbmVzLmgiCiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKQEAgLTI1
NjIsNyArMjU2Miw3IEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXC4uXGhlYXBcTWFya1N0YWNrSW5saW5lTWV0aG9kcy5oIgorCQkJCVJlbGF0aXZl
UGF0aD0iLi5cLi5caGVhcFxNYXJrU3RhY2tJbmxpbmVzLmgiCiAJCQkJPgogCQkJPC9GaWxlPgog
CQkJPEZpbGUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxMzM5
NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTk2LDkgKzE5Niw5IEBACiAJCTBGQjdG
Mzk1MTVFRDhFNDYwMEYxNjdCMiAvKiBBcnJheUNvbnZlbnRpb25zLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI3RjM4OTE1RUQ4RTM4MDBGMTY3QjIg
LyogQXJyYXlDb252ZW50aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGQjdGMzk2MTVFRDhFNDYwMEYxNjdCMiAvKiBBcnJheVN0b3JhZ2Uu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjdGMzhB
MTVFRDhFMzgwMEYxNjdCMiAvKiBBcnJheVN0b3JhZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkI3RjM5NzE1RUQ4RTQ2MDBGMTY3QjIgLyog
QnV0dGVyZmx5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkI3RjM4QjE1RUQ4RTM4MDBGMTY3QjIgLyogQnV0dGVyZmx5LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEZCN0YzOTgxNUVEOEU0NjAwRjE2
N0IyIC8qIEJ1dHRlcmZseUlubGluZU1ldGhvZHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjdGMzhDMTVFRDhFMzgwMEYxNjdCMiAvKiBCdXR0ZXJm
bHlJbmxpbmVNZXRob2RzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMEZCN0YzOTgxNUVEOEU0NjAwRjE2N0IyIC8qIEJ1dHRlcmZseUlubGluZXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjdGMzhD
MTVFRDhFMzgwMEYxNjdCMiAvKiBCdXR0ZXJmbHlJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZCN0YzOTkxNUVEOEU0NjAwRjE2N0Iy
IC8qIEluZGV4aW5nSGVhZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkI3RjM4RDE1RUQ4RTM4MDBGMTY3QjIgLyogSW5kZXhpbmdIZWFkZXIuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkwRkI3RjM5
QTE1RUQ4RTQ2MDBGMTY3QjIgLyogSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI3RjM4RTE1RUQ4RTM4
MDBGMTY3QjIgLyogSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZCN0YzOUExNUVEOEU0NjAwRjE2
N0IyIC8qIEluZGV4aW5nSGVhZGVySW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCN0YzOEUxNUVEOEUzODAwRjE2N0IyIC8qIEluZGV4aW5n
SGVhZGVySW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGQjdGMzlCMTVFRDhFNDYwMEYxNjdCMiAvKiBJbmRleGluZ1R5cGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjdGMzhGMTVFRDhF
MzgwMEYxNjdCMiAvKiBJbmRleGluZ1R5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkI3RjM5QzE1RUQ4RTQ2MDBGMTY3QjIgLyogUHJvcGVy
dHlTdG9yYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkI3RjM5MDE1RUQ4RTM4MDBGMTY3QjIgLyogUHJvcGVydHlTdG9yYWdlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZCN0YzOUQxNUVEOEU0
NjAwRjE2N0IyIC8qIFJlamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZCN0YzOTExNUVEOEUzODAwRjE2N0IyIC8qIFJlamVjdC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC00NTMsNyArNDUzLDcg
QEAKIAkJODYzQzZEOUMxNTIxMTExQTAwNTg1RTRFIC8qIFlhcnJDYW5vbmljYWxpemVVQ1MyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2M0M2RDk4
MTUyMTExMTIwMDU4NUU0RSAvKiBZYXJyQ2Fub25pY2FsaXplVUNTMi5jcHAgKi87IH07CiAJCTg2
NDJDNTEwMTUxQzA2QTkwMDQ2RDRFRiAvKiBSZWdFeHBDYWNoZWRSZXN1bHQuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZGNzVFRkIxNTFDMDYyRjAw
N0M5QkEzIC8qIFJlZ0V4cENhY2hlZFJlc3VsdC5jcHAgKi87IH07CiAJCTg2NDJDNTEyMTUxQzA4
M0QwMDQ2RDRFRiAvKiBSZWdFeHBNYXRjaGVzQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZGNzVFRkQxNTFDMDYyRjAwN0M5QkEzIC8qIFJl
Z0V4cE1hdGNoZXNBcnJheS5jcHAgKi87IH07Ci0JCTg2NUEzMEYxMTM1MDA3RTEwMENEQjQ5RSAv
KiBKU1ZhbHVlSW5saW5lTWV0aG9kcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gODY1QTMwRjAxMzUwMDdFMTAwQ0RCNDlFIC8qIEpTVmFsdWVJbmxpbmVN
ZXRob2RzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJODY1QTMwRjExMzUwMDdFMTAwQ0RCNDlFIC8qIEpTVmFsdWVJbmxpbmVzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NjVBMzBGMDEzNTAwN0UxMDBD
REI0OUUgLyogSlNWYWx1ZUlubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk4NjVGNDA4ODEwRTdENTYzMDA5NDczNjEgLyogQVBJU2hpbXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2NUY0MDg3
MTBFN0Q1NjMwMDk0NzM2MSAvKiBBUElTaGltcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTg2NjczOUQyMTNCRkRFNzEwMDIzRDg3QyAvKiBCaWdJ
bnRlZ2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4
NjY3MzlEMDEzQkZERTcxMDAyM0Q4N0MgLyogQmlnSW50ZWdlci5oICovOyB9OwogCQk4NjY3MzlE
MzEzQkZERTcxMDAyM0Q4N0MgLyogVWludDE2V2l0aEZyYWN0aW9uLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NjY3MzlEMTEzQkZERTcxMDAyM0Q4N0Mg
LyogVWludDE2V2l0aEZyYWN0aW9uLmggKi87IH07CkBAIC00ODksNyArNDg5LDcgQEAKIAkJODZD
NTY4RTIxMUEyMTNFRTAwMDdGN0YwIC8qIE1JUFNBc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2QzU2OERGMTFBMjEzRUUwMDA3RjdGMCAv
KiBNSVBTQXNzZW1ibGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJODZDQTAzMkUxMDM4RTg0NDAwMjhBNjA5IC8qIEV4ZWN1dGFibGUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZDQTAzMkQxMDM4
RTg0NDAwMjhBNjA5IC8qIEV4ZWN1dGFibGUuY3BwICovOyB9OwogCQk4NkNBRkVFMzEwMzVEREU2
MDAyOEE2MDkgLyogRXhlY3V0YWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gODZDQUZFRTIxMDM1RERFNjAwMjhBNjA5IC8qIEV4ZWN1dGFibGUuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk4NkNDODVB
MTBFRTc5QTQ3MDAyODg2ODIgLyogSklUSW5saW5lTWV0aG9kcy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZDQzg1QTAwRUU3OUE0NzAwMjg4NjgyIC8q
IEpJVElubGluZU1ldGhvZHMuaCAqLzsgfTsKKwkJODZDQzg1QTEwRUU3OUE0NzAwMjg4NjgyIC8q
IEpJVElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDg2Q0M4NUEwMEVFNzlBNDcwMDI4ODY4MiAvKiBKSVRJbmxpbmVzLmggKi87IH07CiAJCTg2
Q0M4NUEzMEVFNzlCNzQwMDI4ODY4MiAvKiBKSVRDYWxsLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2Q0M4NUEyMEVFNzlCNzQwMDI4ODY4MiAvKiBK
SVRDYWxsLmNwcCAqLzsgfTsKIAkJODZDQzg1QzQwRUU3QTg5NDAwMjg4NjgyIC8qIEpJVFByb3Bl
cnR5QWNjZXNzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDg2Q0M4NUMzMEVFN0E4OTQwMDI4ODY4MiAvKiBKSVRQcm9wZXJ0eUFjY2Vzcy5jcHAgKi87
IH07CiAJCTg2Q0NFRkRFMEY0MTNGODkwMEZEN0Y5RSAvKiBKSVRDb2RlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkNDRUZERDBGNDEzRjg5MDBGRDdG
OUUgLyogSklUQ29kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CkBAIC03MTQsMTEgKzcxNCwxMSBAQAogCQlCQ0ZEOEM5MzBFRUIyRUU3MDAyODM4NDgg
LyogSnVtcFRhYmxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCQ0ZEOEM5MTBFRUIyRUU3MDAyODM4NDggLyogSnVtcFRhYmxlLmggKi87IH07CiAJCUMy
MTEyMkUxMTVERDlBQjMwMDc5MEUzQSAvKiBHQ1RocmVhZFNoYXJlZERhdGEuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzIxMTIyREUxNUREOUFCMzAw
NzkwRTNBIC8qIEdDVGhyZWFkU2hhcmVkRGF0YS5jcHAgKi87IH07CiAJCUMyMTEyMkUyMTVERDlB
QjMwMDc5MEUzQSAvKiBHQ1RocmVhZFNoYXJlZERhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMTEyMkRGMTVERDlBQjMwMDc5MEUzQSAvKiBHQ1Ro
cmVhZFNoYXJlZERhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwotCQlDMjExMjJFMzE1REQ5QUIzMDA3OTBFM0EgLyogTWFya1N0YWNrSW5saW5lTWV0
aG9kcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzIx
MTIyRTAxNUREOUFCMzAwNzkwRTNBIC8qIE1hcmtTdGFja0lubGluZU1ldGhvZHMuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlDMjE2MEZFNzE1RjdF
OTVFMDA5NDJERkMgLyogU2xvdFZpc2l0b3JJbmxpbmVNZXRob2RzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNCNDA4NTE1QzBBM0MzMDA0ODkzMkIg
LyogU2xvdFZpc2l0b3JJbmxpbmVNZXRob2RzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQzIxMTIyRTMxNUREOUFCMzAwNzkwRTNBIC8qIE1hcmtT
dGFja0lubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEMyMTEyMkUwMTVERDlBQjMwMDc5MEUzQSAvKiBNYXJrU3RhY2tJbmxpbmVzLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQzIxNjBGRTcxNUY3
RTk1RTAwOTQyREZDIC8qIFNsb3RWaXNpdG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDQjQwODUxNUMwQTNDMzAwNDg5MzJCIC8qIFNs
b3RWaXNpdG9ySW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCUMyMjM5RDE3MTYyNjJCREQwMDVBQzVGRCAvKiBDb3B5VmlzaXRvci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjIzOUQxMjE2
MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3IuY3BwICovOyB9OwogCQlDMjIzOUQxODE2MjYy
QkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEMyMjM5RDEzMTYyNjJCREQwMDVBQzVGRCAvKiBDb3B5VmlzaXRv
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUMy
MjM5RDE5MTYyNjJCREQwMDVBQzVGRCAvKiBDb3B5VmlzaXRvcklubGluZU1ldGhvZHMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMjM5RDE0MTYyNjJC
REQwMDVBQzVGRCAvKiBDb3B5VmlzaXRvcklubGluZU1ldGhvZHMuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlDMjIzOUQxOTE2MjYyQkREMDA1QUM1
RkQgLyogQ29weVZpc2l0b3JJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBDMjIzOUQxNDE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3JJ
bmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJQzIyMzlEMUExNjI2MkJERDAwNUFDNUZEIC8qIEdDVGhyZWFkLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMjM5RDE1MTYyNjJCREQwMDVBQzVG
RCAvKiBHQ1RocmVhZC5jcHAgKi87IH07CiAJCUMyMjM5RDFCMTYyNjJCREQwMDVBQzVGRCAvKiBH
Q1RocmVhZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QzIyMzlEMTYxNjI2MkJERDAwNUFDNUZEIC8qIEdDVGhyZWFkLmggKi87IH07CiAJCUMyMjU0OTQz
MTVGN0RCQUEwMDY1RTg5OCAvKiBTbG90VmlzaXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjI1NDk0MjE1RjdEQkFBMDA2NUU4OTggLyogU2xv
dFZpc2l0b3IuY3BwICovOyB9OwpAQCAtNzMxLDcgKzczMSw3IEBACiAJCUMyQTdGNjg4MTYwNDMy
RDQwMEY3NkI5OCAvKiBKU0Rlc3RydWN0aWJsZU9iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJBN0Y2ODcxNjA0MzJENDAwRjc2Qjk4IC8qIEpT
RGVzdHJ1Y3RpYmxlT2JqZWN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJQzJCOTE2QzIxNERBMDE0RTAwQ0JBQzg2IC8qIE1hcmtlZEFsbG9jYXRv
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJCOTE2
QzExNERBMDE0RTAwQ0JBQzg2IC8qIE1hcmtlZEFsbG9jYXRvci5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUMyQjkxNkM1MTREQTA0MEMwMENCQUM4
NiAvKiBNYXJrZWRBbGxvY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQzJCOTE2QzQxNERBMDQwQzAwQ0JBQzg2IC8qIE1hcmtlZEFsbG9jYXRv
ci5jcHAgKi87IH07Ci0JCUMyQzhEMDJEMTRBM0M2RTAwMDU3OEU2NSAvKiBDb3BpZWRTcGFjZUlu
bGluZU1ldGhvZHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEMyQzhEMDJCMTRBM0M2QjIwMDU3OEU2NSAvKiBDb3BpZWRTcGFjZUlubGluZU1ldGhvZHMu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlDMkM4
RDAyRDE0QTNDNkUwMDA1NzhFNjUgLyogQ29waWVkU3BhY2VJbmxpbmVzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkM4RDAyQjE0QTNDNkIyMDA1NzhF
NjUgLyogQ29waWVkU3BhY2VJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJQzJDOEQwMzAxNEEzQ0VGQzAwNTc4RTY1IC8qIENvcGllZEJs
b2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkM4
RDAyRTE0QTNDRUZDMDA1NzhFNjUgLyogQ29waWVkQmxvY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlDMkM4RDAzMTE0QTNDRUZDMDA1NzhFNjUg
LyogSGVhcEJsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBDMkM4RDAyRjE0QTNDRUZDMDA1NzhFNjUgLyogSGVhcEJsb2NrLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQzJENThDMzQxNTkxMkZFRTAw
MjFBODQ0IC8qIEdDQWN0aXZpdHlDYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkQ1OEMzMzE1OTEyRkVFMDAyMUE4NDQgLyogR0NBY3Rp
dml0eUNhbGxiYWNrLmNwcCAqLzsgfTsKQEAgLTk4NSw5ICs5ODUsOSBAQAogCQkwRkI3RjM4OTE1
RUQ4RTM4MDBGMTY3QjIgLyogQXJyYXlDb252ZW50aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBBcnJheUNvbnZlbnRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGQjdGMzhBMTVFRDhFMzgwMEYxNjdCMiAvKiBBcnJheVN0b3JhZ2UuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXJyYXlTdG9yYWdlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGQjdGMzhCMTVFRDhFMzgwMEYxNjdCMiAvKiBCdXR0ZXJmbHkuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQnV0dGVyZmx5Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTBGQjdGMzhDMTVFRDhFMzgwMEYxNjdCMiAvKiBCdXR0ZXJmbHlJ
bmxpbmVNZXRob2RzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ1dHRlcmZs
eUlubGluZU1ldGhvZHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCN0YzOEMx
NUVEOEUzODAwRjE2N0IyIC8qIEJ1dHRlcmZseUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQnV0dGVyZmx5SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRkI3RjM4RDE1RUQ4RTM4MDBGMTY3QjIgLyogSW5kZXhpbmdIZWFkZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5kZXhpbmdIZWFkZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEZCN0YzOEUxNUVEOEUzODAwRjE2N0IyIC8qIEluZGV4aW5n
SGVhZGVySW5saW5lTWV0aG9kcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJ
bmRleGluZ0hlYWRlcklubGluZU1ldGhvZHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZCN0YzOEUxNUVEOEUzODAwRjE2N0IyIC8qIEluZGV4aW5nSGVhZGVySW5saW5lcy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmRleGluZ0hlYWRlcklubGluZXMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCN0YzOEYxNUVEOEUzODAwRjE2N0IyIC8q
IEluZGV4aW5nVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmRleGlu
Z1R5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCN0YzOTAxNUVEOEUzODAw
RjE2N0IyIC8qIFByb3BlcnR5U3RvcmFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBQcm9wZXJ0eVN0b3JhZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZC
N0YzOTExNUVEOEUzODAwRjE2N0IyIC8qIFJlamVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBSZWplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwMTIs
NyArMTAxMiw3IEBACiAJCTBGQzgxNTA5MTQwNDNCRDIwMENGQTYwMyAvKiBXcml0ZUJhcnJpZXJT
dXBwb3J0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdyaXRlQmFycmllclN1
cHBvcnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZDODE1MTIxNDA1MTE4NjAw
Q0ZBNjAzIC8qIFZUYWJsZVNwZWN0cnVtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFZUYWJsZVNwZWN0cnVtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEZDODE1MTQxNDA1MTE4RDAwQ0ZBNjAzIC8qIFZUYWJsZVNwZWN0cnVtLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZUYWJsZVNwZWN0cnVtLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTBGQ0I0MDg1MTVDMEEzQzMwMDQ4OTMyQiAvKiBTbG90VmlzaXRvcklu
bGluZU1ldGhvZHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2xvdFZpc2l0
b3JJbmxpbmVNZXRob2RzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQ0I0MDg1
MTVDMEEzQzMwMDQ4OTMyQiAvKiBTbG90VmlzaXRvcklubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU2xvdFZpc2l0b3JJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGRDNDODIwMTQxMTVDRjgwMEZEODFDQiAvKiBERkdEcml2ZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHRHJpdmVyLmNwcDsgcGF0aCA9
IGRmZy9ERkdEcml2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQzQzgy
MjE0MTE1RDBFMDBGRDgxQ0IgLyogREZHRHJpdmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERGR0RyaXZlci5oOyBwYXRoID0gZGZnL0RGR0RyaXZlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRkQ4MUFDRjE1NEZCNEVCMDA5ODNFNzIgLyogREZHRG9taW5h
dG9ycy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdEb21pbmF0
b3JzLmNwcDsgcGF0aCA9IGRmZy9ERkdEb21pbmF0b3JzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTEyMzIsNyArMTIzMiw3IEBACiAJCTg2M0M2RDk4MTUyMTExMTIwMDU4NUU0
RSAvKiBZYXJyQ2Fub25pY2FsaXplVUNTMi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBZYXJyQ2Fub25pY2FsaXplVUNTMi5jcHA7IHBhdGggPSB5YXJyL1lhcnJDYW5v
bmljYWxpemVVQ1MyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODYzQzZEOTkx
NTIxMTExMjAwNTg1RTRFIC8qIFlhcnJDYW5vbmljYWxpemVVQ1MyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IFlhcnJDYW5vbmljYWxpemVVQ1MyLmg7IHBhdGggPSB5YXJyL1lh
cnJDYW5vbmljYWxpemVVQ1MyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2M0M2
RDlBMTUyMTExMTIwMDU4NUU0RSAvKiBZYXJyQ2Fub25pY2FsaXplVUNTMi5qcyAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgbmFtZSA9IFlhcnJDYW5vbmljYWxpemVVQ1MyLmpzOyBw
YXRoID0geWFyci9ZYXJyQ2Fub25pY2FsaXplVUNTMi5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJODY1QTMwRjAxMzUwMDdFMTAwQ0RCNDlFIC8qIEpTVmFsdWVJbmxpbmVNZXRob2Rz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTVmFsdWVJbmxpbmVNZXRob2Rz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg2NUEzMEYwMTM1MDA3RTEwMENEQjQ5
RSAvKiBKU1ZhbHVlSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBK
U1ZhbHVlSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NjVGNDA4NzEw
RTdENTYzMDA5NDczNjEgLyogQVBJU2hpbXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQVBJU2hpbXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODY2NzM5RDAx
M0JGREU3MTAwMjNEODdDIC8qIEJpZ0ludGVnZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQmlnSW50ZWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NjY3
MzlEMTEzQkZERTcxMDAyM0Q4N0MgLyogVWludDE2V2l0aEZyYWN0aW9uLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVpbnQxNldpdGhGcmFjdGlvbi5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMTI3NCw3ICsxMjc0LDcgQEAKIAkJODZDNTY4REYxMUEyMTNFRTAw
MDdGN0YwIC8qIE1JUFNBc3NlbWJsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gTUlQU0Fzc2VtYmxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkNBMDMy
RDEwMzhFODQ0MDAyOEE2MDkgLyogRXhlY3V0YWJsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBFeGVjdXRhYmxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJODZDQUZFRTIxMDM1RERFNjAwMjhBNjA5IC8qIEV4ZWN1dGFibGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXhlY3V0YWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQk4NkNDODVBMDBFRTc5QTQ3MDAyODg2ODIgLyogSklUSW5saW5lTWV0aG9kcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKSVRJbmxpbmVNZXRob2RzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg2Q0M4NUEwMEVFNzlBNDcwMDI4ODY4MiAvKiBK
SVRJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVElubGluZXMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZDQzg1QTIwRUU3OUI3NDAwMjg4Njgy
IC8qIEpJVENhbGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSklU
Q2FsbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2Q0M4NUMzMEVFN0E4OTQw
MDI4ODY4MiAvKiBKSVRQcm9wZXJ0eUFjY2Vzcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBKSVRQcm9wZXJ0eUFjY2Vzcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTg2Q0NFRkREMEY0MTNGODkwMEZEN0Y5RSAvKiBKSVRDb2RlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVENvZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTE1MDcsMTAgKzE1MDcsMTAgQEAKIAkJQkNGRDhDOTEwRUVCMkVFNzAwMjgzODQ4
IC8qIEp1bXBUYWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKdW1wVGFi
bGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIxMTIyREUxNUREOUFCMzAwNzkw
RTNBIC8qIEdDVGhyZWFkU2hhcmVkRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBHQ1RocmVhZFNoYXJlZERhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlDMjExMjJERjE1REQ5QUIzMDA3OTBFM0EgLyogR0NUaHJlYWRTaGFyZWREYXRhLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdDVGhyZWFkU2hhcmVkRGF0YS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDMjExMjJFMDE1REQ5QUIzMDA3OTBFM0EgLyog
TWFya1N0YWNrSW5saW5lTWV0aG9kcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBNYXJrU3RhY2tJbmxpbmVNZXRob2RzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUMyMTEyMkUwMTVERDlBQjMwMDc5MEUzQSAvKiBNYXJrU3RhY2tJbmxpbmVzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hcmtTdGFja0lubGluZXMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQzIyMzlEMTIxNjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNpdG9y
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvcHlWaXNpdG9yLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIyMzlEMTMxNjI2MkJERDAwNUFDNUZE
IC8qIENvcHlWaXNpdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvcHlW
aXNpdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUMyMjM5RDE0MTYyNjJCREQw
MDVBQzVGRCAvKiBDb3B5VmlzaXRvcklubGluZU1ldGhvZHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQ29weVZpc2l0b3JJbmxpbmVNZXRob2RzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUMyMjM5RDE0MTYyNjJCREQwMDVBQzVGRCAvKiBDb3B5VmlzaXRvcklu
bGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29weVZpc2l0b3JJbmxp
bmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMjM5RDE1MTYyNjJCREQwMDVB
QzVGRCAvKiBHQ1RocmVhZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBHQ1RocmVhZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMjM5RDE2MTYy
NjJCREQwMDVBQzVGRCAvKiBHQ1RocmVhZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBHQ1RocmVhZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjI1NDk0MjE1
RjdEQkFBMDA2NUU4OTggLyogU2xvdFZpc2l0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gU2xvdFZpc2l0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMTUyMiw3ICsxNTIyLDcgQEAKIAkJQzJBN0Y2ODcxNjA0MzJENDAwRjc2Qjk4IC8qIEpT
RGVzdHJ1Y3RpYmxlT2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpT
RGVzdHJ1Y3RpYmxlT2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyQjkx
NkMxMTREQTAxNEUwMENCQUM4NiAvKiBNYXJrZWRBbGxvY2F0b3IuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gTWFya2VkQWxsb2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUMyQjkxNkM0MTREQTA0MEMwMENCQUM4NiAvKiBNYXJrZWRBbGxvY2F0b3IuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFya2VkQWxsb2NhdG9yLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzJDOEQwMkIxNEEzQzZCMjAwNTc4RTY1
IC8qIENvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBDb3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQzJDOEQwMkIxNEEzQzZCMjAwNTc4RTY1IC8qIENvcGllZFNwYWNlSW5saW5lcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb3BpZWRTcGFjZUlubGluZXMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzJDOEQwMkUxNEEzQ0VGQzAwNTc4RTY1IC8q
IENvcGllZEJsb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvcGllZEJs
b2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyQzhEMDJGMTRBM0NFRkMwMDU3
OEU2NSAvKiBIZWFwQmxvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGVh
cEJsb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyRDU4QzMzMTU5MTJGRUUw
MDIxQTg0NCAvKiBHQ0FjdGl2aXR5Q2FsbGJhY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gR0NBY3Rpdml0eUNhbGxiYWNrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTE4MjIsNyArMTgyMiw3IEBACiAJCQkJMEYyMUMyNjYxNEJFNUY1RTAwQURD
NjRCIC8qIEpJVERyaXZlci5oICovLAogCQkJCTBGNDY4MDdGMTRCQTU3MjcwMEJGRTI3MiAvKiBK
SVRFeGNlcHRpb25zLmNwcCAqLywKIAkJCQkwRjQ2ODA4MDE0QkE1NzI3MDBCRkUyNzIgLyogSklU
RXhjZXB0aW9ucy5oICovLAotCQkJCTg2Q0M4NUEwMEVFNzlBNDcwMDI4ODY4MiAvKiBKSVRJbmxp
bmVNZXRob2RzLmggKi8sCisJCQkJODZDQzg1QTAwRUU3OUE0NzAwMjg4NjgyIC8qIEpJVElubGlu
ZXMuaCAqLywKIAkJCQlCQ0RENTFFOTBGQjhERjc0MDA0QThCREMgLyogSklUT3Bjb2Rlcy5jcHAg
Ki8sCiAJCQkJQTcxMjM2RTQxMTk1RjMzQzAwQkQyMTc0IC8qIEpJVE9wY29kZXMzMl82NC5jcHAg
Ki8sCiAJCQkJODZDQzg1QzMwRUU3QTg5NDAwMjg4NjgyIC8qIEpJVFByb3BlcnR5QWNjZXNzLmNw
cCAqLywKQEAgLTE4NDgsNyArMTg0OCw3IEBACiAJCQljaGlsZHJlbiA9ICgKIAkJCQlDMjIzOUQx
MjE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3IuY3BwICovLAogCQkJCUMyMjM5RDEzMTYy
NjJCREQwMDVBQzVGRCAvKiBDb3B5VmlzaXRvci5oICovLAotCQkJCUMyMjM5RDE0MTYyNjJCREQw
MDVBQzVGRCAvKiBDb3B5VmlzaXRvcklubGluZU1ldGhvZHMuaCAqLywKKwkJCQlDMjIzOUQxNDE2
MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3JJbmxpbmVzLmggKi8sCiAJCQkJQzIyMzlEMTUx
NjI2MkJERDAwNUFDNUZEIC8qIEdDVGhyZWFkLmNwcCAqLywKIAkJCQlDMjIzOUQxNjE2MjYyQkRE
MDA1QUM1RkQgLyogR0NUaHJlYWQuaCAqLywKIAkJCQlDMjREMzFFMDE2MUNENjk1MDAyQUE0REIg
LyogSGVhcFN0YXRpc3RpY3MuY3BwICovLApAQCAtMTg1Niw3ICsxODU2LDcgQEAKIAkJCQlDMjI1
NDk0MjE1RjdEQkFBMDA2NUU4OTggLyogU2xvdFZpc2l0b3IuY3BwICovLAogCQkJCUMyMTEyMkRF
MTVERDlBQjMwMDc5MEUzQSAvKiBHQ1RocmVhZFNoYXJlZERhdGEuY3BwICovLAogCQkJCUMyMTEy
MkRGMTVERDlBQjMwMDc5MEUzQSAvKiBHQ1RocmVhZFNoYXJlZERhdGEuaCAqLywKLQkJCQlDMjEx
MjJFMDE1REQ5QUIzMDA3OTBFM0EgLyogTWFya1N0YWNrSW5saW5lTWV0aG9kcy5oICovLAorCQkJ
CUMyMTEyMkUwMTVERDlBQjMwMDc5MEUzQSAvKiBNYXJrU3RhY2tJbmxpbmVzLmggKi8sCiAJCQkJ
QzJFNTI2QkIxNTkwRUYwMDAwNTRFNDhEIC8qIEhlYXBUaW1lci5jcHAgKi8sCiAJCQkJQzJFNTI2
QkMxNTkwRUYwMDAwNTRFNDhEIC8qIEhlYXBUaW1lci5oICovLAogCQkJCUMyNUY4QkNCMTU3NTQ0
QTkwMDI0NUI3MSAvKiBJbmNyZW1lbnRhbFN3ZWVwZXIuY3BwICovLApAQCAtMTg3MCw3ICsxODcw
LDcgQEAKIAkJCQlDMkM4RDAyRTE0QTNDRUZDMDA1NzhFNjUgLyogQ29waWVkQmxvY2suaCAqLywK
IAkJCQlDMjQwMzA1MzE0QjQwNEM5MDA3OUVCNjQgLyogQ29waWVkU3BhY2UuY3BwICovLAogCQkJ
CUMyRUFBM0Y4MTQ5QTgzMDgwMEZDRTExMiAvKiBDb3BpZWRTcGFjZS5oICovLAotCQkJCUMyQzhE
MDJCMTRBM0M2QjIwMDU3OEU2NSAvKiBDb3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaCAqLywKKwkJ
CQlDMkM4RDAyQjE0QTNDNkIyMDA1NzhFNjUgLyogQ29waWVkU3BhY2VJbmxpbmVzLmggKi8sCiAJ
CQkJMEYyQzU1NkQxNDczOEYyRTAwMTIxRTRGIC8qIERGR0NvZGVCbG9ja3MuY3BwICovLAogCQkJ
CTBGMkM1NTZFMTQ3MzhGMkUwMDEyMUU0RiAvKiBERkdDb2RlQmxvY2tzLmggKi8sCiAJCQkJQkNC
RTJDQUQxNEU5ODVBQTAwMDU5M0FEIC8qIEdDQXNzZXJ0aW9ucy5oICovLApAQCAtMTkwMiw3ICsx
OTAyLDcgQEAKIAkJCQkxNDJENkYwRjEzNTM5QTQxMDBCMDJFODYgLyogTWFya1N0YWNrLmggKi8s
CiAJCQkJMTQ5NzIwOTAxNEVCODMxNTAwRkVCMUI3IC8qIFBhc3NXZWFrLmggKi8sCiAJCQkJMTRC
QTc4RjAxM0FBQjg4RjAwNUI3QzJDIC8qIFNsb3RWaXNpdG9yLmggKi8sCi0JCQkJMEZDQjQwODUx
NUMwQTNDMzAwNDg5MzJCIC8qIFNsb3RWaXNpdG9ySW5saW5lTWV0aG9kcy5oICovLAorCQkJCTBG
Q0I0MDg1MTVDMEEzQzMwMDQ4OTMyQiAvKiBTbG90VmlzaXRvcklubGluZXMuaCAqLywKIAkJCQkx
NDJFMzEzMjEzNEZGMEE2MDBBRkFEQjUgLyogU3Ryb25nLmggKi8sCiAJCQkJMTQ1NzIyODUxNDM3
RTE0MDAwNUZERTI2IC8qIFN0cm9uZ0lubGluZXMuaCAqLywKIAkJCQkxNDE0NDhDQzEzQTE3ODM3
MDBGNUJBMUEgLyogVGlueUJsb29tRmlsdGVyLmggKi8sCkBAIC0yMTA2LDcgKzIxMDYsNyBAQAog
CQkJCUJDNzk1MjM0MEUxNUVCNTYwMEE4OThBQiAvKiBCb29sZWFuUHJvdG90eXBlLmNwcCAqLywK
IAkJCQlCQzc5NTIzNTBFMTVFQjU2MDBBODk4QUIgLyogQm9vbGVhblByb3RvdHlwZS5oICovLAog
CQkJCTBGQjdGMzhCMTVFRDhFMzgwMEYxNjdCMiAvKiBCdXR0ZXJmbHkuaCAqLywKLQkJCQkwRkI3
RjM4QzE1RUQ4RTM4MDBGMTY3QjIgLyogQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oICovLAorCQkJ
CTBGQjdGMzhDMTVFRDhFMzgwMEYxNjdCMiAvKiBCdXR0ZXJmbHlJbmxpbmVzLmggKi8sCiAJCQkJ
ODY5RDA0QUUxMTkzQjU0RDAwODAzNDc1IC8qIENhY2hlZFRyYW5zY2VuZGVudGFsRnVuY3Rpb24u
aCAqLywKIAkJCQlCQ0E2MkRGRTBFMjgyNjIzMDAwNEYzMEQgLyogQ2FsbERhdGEuY3BwICovLAog
CQkJCTE0NUM1MDdGMEQ5REY2M0IwMDg4RjZCOSAvKiBDYWxsRGF0YS5oICovLApAQCAtMjE1Miw3
ICsyMTUyLDcgQEAKIAkJCQk5MzNBMzQ5RDAzOEFFODBGMDA4NjM1Q0UgLyogSWRlbnRpZmllci5j
cHAgKi8sCiAJCQkJOTMzQTM0OUEwMzhBRTdDNjAwODYzNUNFIC8qIElkZW50aWZpZXIuaCAqLywK
IAkJCQkwRkI3RjM4RDE1RUQ4RTM4MDBGMTY3QjIgLyogSW5kZXhpbmdIZWFkZXIuaCAqLywKLQkJ
CQkwRkI3RjM4RTE1RUQ4RTM4MDBGMTY3QjIgLyogSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2Rz
LmggKi8sCisJCQkJMEZCN0YzOEUxNUVEOEUzODAwRjE2N0IyIC8qIEluZGV4aW5nSGVhZGVySW5s
aW5lcy5oICovLAogCQkJCTBGMTNFMDRDMTYxNjRBMUIwMERDOERFNyAvKiBJbmRleGluZ1R5cGUu
Y3BwICovLAogCQkJCTBGQjdGMzhGMTVFRDhFMzgwMEYxNjdCMiAvKiBJbmRleGluZ1R5cGUuaCAq
LywKIAkJCQlFMTc4NjM2QzBEOUJFRUMzMDBENzRFNzUgLyogSW5pdGlhbGl6ZVRocmVhZGluZy5j
cHAgKi8sCkBAIC0yMjA5LDcgKzIyMDksNyBAQAogCQkJCTY1MDdEMjk3MEU4NzFFNEEwMEQ3RDg5
NiAvKiBKU1R5cGVJbmZvLmggKi8sCiAJCQkJRjY5MkE4ODcwMjU1NTk3RDAxRkY2MEY3IC8qIEpT
VmFsdWUuY3BwICovLAogCQkJCTE0QUJCMzZFMDk5QzA3NjQwMEUyQTI0RiAvKiBKU1ZhbHVlLmgg
Ki8sCi0JCQkJODY1QTMwRjAxMzUwMDdFMTAwQ0RCNDlFIC8qIEpTVmFsdWVJbmxpbmVNZXRob2Rz
LmggKi8sCisJCQkJODY1QTMwRjAxMzUwMDdFMTAwQ0RCNDlFIC8qIEpTVmFsdWVJbmxpbmVzLmgg
Ki8sCiAJCQkJQkMyMkEzOUEwRTE2RTE0ODAwQUYyMUM4IC8qIEpTVmFyaWFibGVPYmplY3QuY3Bw
ICovLAogCQkJCTE0RjI1MjU2MEQwOEREOEQwMDRFQ0ZGRiAvKiBKU1ZhcmlhYmxlT2JqZWN0Lmgg
Ki8sCiAJCQkJMTQ0MjU2NUYxNUVERTk4RDAwNjZBNDlCIC8qIEpTV2l0aFNjb3BlLmNwcCAqLywK
QEAgLTI2MjUsMTQgKzI2MjUsMTQgQEAKIAkJCQlDMkI5MTZDMjE0REEwMTRFMDBDQkFDODYgLyog
TWFya2VkQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTRBMzMyMDE1QkQyRTA3MDA2
RjU0RjMgLyogVk1JbnNwZWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyMjM5RDE4MTYyNjJC
REQwMDVBQzVGRCAvKiBDb3B5VmlzaXRvci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQzIyMzlEMTkx
NjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNpdG9ySW5saW5lTWV0aG9kcy5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJQzIyMzlEMTkxNjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNpdG9ySW5saW5lcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQzI0RDMxRTMxNjFDRDY5NTAwMkFBNERCIC8qIEhlYXBTdGF0
aXN0aWNzLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMkE3RjY4ODE2MDQzMkQ0MDBGNzZCOTggLyog
SlNEZXN0cnVjdGlibGVPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFMjBDRTlFMTVGMDRB
OTUwMERGMzQzMCAvKiBMTEludENMb29wLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjExMjJFMjE1
REQ5QUIzMDA3OTBFM0EgLyogR0NUaHJlYWRTaGFyZWREYXRhLmggaW4gSGVhZGVycyAqLywKLQkJ
CQlDMjE2MEZFNzE1RjdFOTVFMDA5NDJERkMgLyogU2xvdFZpc2l0b3JJbmxpbmVNZXRob2RzLmgg
aW4gSGVhZGVycyAqLywKKwkJCQlDMjE2MEZFNzE1RjdFOTVFMDA5NDJERkMgLyogU2xvdFZpc2l0
b3JJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMkU1MjZCRTE1OTBFRjAwMDA1NEU0OEQg
LyogSGVhcFRpbWVyLmggaW4gSGVhZGVycyAqLywKLQkJCQlDMjExMjJFMzE1REQ5QUIzMDA3OTBF
M0EgLyogTWFya1N0YWNrSW5saW5lTWV0aG9kcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJQzIxMTIy
RTMxNUREOUFCMzAwNzkwRTNBIC8qIE1hcmtTdGFja0lubGluZXMuaCBpbiBIZWFkZXJzICovLAog
CQkJCUMyNUY4QkNFMTU3NTQ0QTkwMDI0NUI3MSAvKiBJbmNyZW1lbnRhbFN3ZWVwZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDMThDM0U2MEUxNkY1Q0QwMEIzNDQ2MCAvKiBBcnJheUNvbnN0cnVj
dG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNFNzBFMTZGNUNEMDBCMzQ0NjAgLyogQXJy
YXlQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLApAQCAtMjY0NSw3ICsyNjQ1LDcgQEAKIAkJCQlC
QzE4QzNFQzBFMTZGNUNEMDBCMzQ0NjAgLyogQm9vbGVhbk9iamVjdC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQzJDOEQwMzAxNEEzQ0VGQzAwNTc4RTY1IC8qIENvcGllZEJsb2NrLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlDMkVBQTNGQTE0OUE4MzVFMDBGQ0UxMTIgLyogQ29waWVkU3BhY2UuaCBpbiBI
ZWFkZXJzICovLAotCQkJCUMyQzhEMDJEMTRBM0M2RTAwMDU3OEU2NSAvKiBDb3BpZWRTcGFjZUlu
bGluZU1ldGhvZHMuaCBpbiBIZWFkZXJzICovLAorCQkJCUMyQzhEMDJEMTRBM0M2RTAwMDU3OEU2
NSAvKiBDb3BpZWRTcGFjZUlubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTk2OUEwNzIzMEVE
MUNFMzMwMEYxRjY4MSAvKiBCeXRlY29kZUdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
ODY5RDA0QUYxMTkzQjU0RDAwODAzNDc1IC8qIENhY2hlZFRyYW5zY2VuZGVudGFsRnVuY3Rpb24u
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0VEMEUxNkY1Q0QwMEIzNDQ2MCAvKiBDYWxsRGF0
YS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNzI3LDcgKzI3MjcsNyBAQAogCQkJCUJDMThDNDE1MEUx
NkY1Q0QwMEIzNDQ2MCAvKiBKYXZhU2NyaXB0Q29yZVByZWZpeC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMTQyOUQ5MzAwRUQyMkQ3MDAwQjg5NjE5IC8qIEpJVC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
ODZDQ0VGREUwRjQxM0Y4OTAwRkQ3RjlFIC8qIEpJVENvZGUuaCBpbiBIZWFkZXJzICovLAotCQkJ
CTg2Q0M4NUExMEVFNzlBNDcwMDI4ODY4MiAvKiBKSVRJbmxpbmVNZXRob2RzLmggaW4gSGVhZGVy
cyAqLywKKwkJCQk4NkNDODVBMTBFRTc5QTQ3MDAyODg2ODIgLyogSklUSW5saW5lcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJOTYwNjI2OTYwRkI4RUMwMjAwOTc5OEFCIC8qIEpJVFN0dWJDYWxsLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxNEM1MjQyQjBGNTM1NUU5MDBCQTNEMDQgLyogSklUU3R1YnMu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE3NkY1NEEzMTNCMjhBQUIwMEVGMkJDRSAvKiBKSVRXcml0
ZUJhcnJpZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMjc2OSw3ICsyNzY5LDcgQEAKIAkJCQlCQzE4
QzQyQTBFMTZGNUNEMDBCMzQ0NjAgLyogSlNUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk2NTA3
RDI5RTBFODcxRTVFMDBEN0Q4OTYgLyogSlNUeXBlSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkMxOEM0MkIwRTE2RjVDRDAwQjM0NDYwIC8qIEpTVmFsdWUuaCBpbiBIZWFkZXJzICovLAotCQkJ
CTg2NUEzMEYxMTM1MDA3RTEwMENEQjQ5RSAvKiBKU1ZhbHVlSW5saW5lTWV0aG9kcy5oIGluIEhl
YWRlcnMgKi8sCisJCQkJODY1QTMwRjExMzUwMDdFMTAwQ0RCNDlFIC8qIEpTVmFsdWVJbmxpbmVz
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQyQzBFMTZGNUNEMDBCMzQ0NjAgLyogSlNWYWx1
ZVJlZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MkQwRTE2RjVDRDAwQjM0NDYwIC8qIEpT
VmFyaWFibGVPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NDgyRTkzMTE2QTdDQUQwMDNC
MDcxMiAvKiBKU1dlYWtPYmplY3RNYXBSZWZJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCkBAIC0z
MDAzLDkgKzMwMDMsOSBAQAogCQkJCTBGQjdGMzk1MTVFRDhFNDYwMEYxNjdCMiAvKiBBcnJheUNv
bnZlbnRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkI3RjM5NjE1RUQ4RTQ2MDBGMTY3QjIg
LyogQXJyYXlTdG9yYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkI3RjM5NzE1RUQ4RTQ2MDBG
MTY3QjIgLyogQnV0dGVyZmx5LmggaW4gSGVhZGVycyAqLywKLQkJCQkwRkI3RjM5ODE1RUQ4RTQ2
MDBGMTY3QjIgLyogQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEZCN0YzOTgxNUVEOEU0NjAwRjE2N0IyIC8qIEJ1dHRlcmZseUlubGluZXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGQjdGMzk5MTVFRDhFNDYwMEYxNjdCMiAvKiBJbmRleGluZ0hlYWRlci5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJMEZCN0YzOUExNUVEOEU0NjAwRjE2N0IyIC8qIEluZGV4aW5nSGVh
ZGVySW5saW5lTWV0aG9kcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZCN0YzOUExNUVEOEU0NjAw
RjE2N0IyIC8qIEluZGV4aW5nSGVhZGVySW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZC
N0YzOUIxNUVEOEU0NjAwRjE2N0IyIC8qIEluZGV4aW5nVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZCN0YzOUMxNUVEOEU0NjAwRjE2N0IyIC8qIFByb3BlcnR5U3RvcmFnZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZCN0YzOUQxNUVEOEU0NjAwRjE2N0IyIC8qIFJlamVjdC5oIGluIEhlYWRl
cnMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmNwcAkocmV2aXNpb24gMTMzOTczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAKICNpbmNsdWRl
ICJKU1ZhbHVlLmgiCiAjaW5jbHVkZSAiTG93TGV2ZWxJbnRlcnByZXRlci5oIgogI2luY2x1ZGUg
IlJlcGF0Y2hCdWZmZXIuaCIKLSNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZU1ldGhvZHMuaCIK
KyNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKICNpbmNsdWRlIDxzdGRpby5oPgogI2lu
Y2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2
aXNpb24gMTMzOTczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25z
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsOSArMjcsOSBAQAogI2luY2x1ZGUgIkRGR09wZXJh
dGlvbnMuaCIKIAogI2luY2x1ZGUgIkFyZ3VtZW50cy5oIgotI2luY2x1ZGUgIkJ1dHRlcmZseUlu
bGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJCdXR0ZXJmbHlJbmxpbmVzLmgiCiAjaW5jbHVkZSAi
Q29kZUJsb2NrLmgiCi0jaW5jbHVkZSAiQ29waWVkU3BhY2VJbmxpbmVNZXRob2RzLmgiCisjaW5j
bHVkZSAiQ29waWVkU3BhY2VJbmxpbmVzLmgiCiAjaW5jbHVkZSAiREZHT1NSRXhpdC5oIgogI2lu
Y2x1ZGUgIkRGR1JlcGF0Y2guaCIKICNpbmNsdWRlICJERkdUaHVua3MuaCIKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVSb290cy5jcHAJKHJldmlz
aW9uIDEzMzk3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJv
b3RzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsOSArMjYsOSBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIkNvbnNlcnZhdGl2ZVJvb3RzLmgiCiAKLSNpbmNsdWRlICJDb3BpZWRT
cGFjZS5oIgotI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUg
IkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkNvcGllZFNwYWNlLmgiCisjaW5jbHVkZSAiQ29waWVk
U3BhY2VJbmxpbmVzLmgiCiAjaW5jbHVkZSAiREZHQ29kZUJsb2Nrcy5oIgogI2luY2x1ZGUgIkpT
Q2VsbC5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9Db3BpZWRCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0NvcGllZEJsb2NrLmgJKHJldmlzaW9uIDEzMzk3MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0NvcGllZEJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcg
QEAKICNpbmNsdWRlICJCbG9ja0FsbG9jYXRvci5oIgogI2luY2x1ZGUgIkhlYXBCbG9jay5oIgog
I2luY2x1ZGUgIkpTVmFsdWUuaCIKLSNpbmNsdWRlICJKU1ZhbHVlSW5saW5lTWV0aG9kcy5oIgor
I2luY2x1ZGUgIkpTVmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiT3B0aW9ucy5oIgogI2luY2x1
ZGUgPHd0Zi9BdG9taWNzLmg+CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Nv
cGllZFNwYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9D
b3BpZWRTcGFjZS5jcHAJKHJldmlzaW9uIDEzMzk3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0NvcGllZFNwYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkNvcGllZFNwYWNlLmgiCiAKLSNpbmNsdWRl
ICJDb3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGlu
ZXMuaCIKICNpbmNsdWRlICJHQ0FjdGl2aXR5Q2FsbGJhY2suaCIKICNpbmNsdWRlICJPcHRpb25z
LmgiCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlSW5saW5l
TWV0aG9kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGll
ZFNwYWNlSW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAxMzM5NzMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaAkod29ya2luZyBjb3B5KQpA
QCAtMSwxODUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
LSAqLwotCi0jaWZuZGVmIENvcGllZFNwYWNlSW5saW5lTWV0aG9kc19oCi0jZGVmaW5lIENvcGll
ZFNwYWNlSW5saW5lTWV0aG9kc19oCi0KLSNpbmNsdWRlICJDb3BpZWRCbG9jay5oIgotI2luY2x1
ZGUgIkNvcGllZFNwYWNlLmgiCi0jaW5jbHVkZSAiSGVhcC5oIgotI2luY2x1ZGUgIkhlYXBCbG9j
ay5oIgotI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgotI2luY2x1ZGUgPHd0Zi9DaGVja2VkQm9v
bGVhbi5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotaW5saW5lIGJvb2wgQ29waWVkU3BhY2U6OmNv
bnRhaW5zKENvcGllZEJsb2NrKiBibG9jaykKLXsKLSAgICByZXR1cm4gIW1fYmxvY2tGaWx0ZXIu
cnVsZU91dChyZWludGVycHJldF9jYXN0PEJpdHM+KGJsb2NrKSkgJiYgbV9ibG9ja1NldC5jb250
YWlucyhibG9jayk7Ci19Ci0KLWlubGluZSBib29sIENvcGllZFNwYWNlOjpjb250YWlucyh2b2lk
KiBwdHIsIENvcGllZEJsb2NrKiYgcmVzdWx0KQotewotICAgIENvcGllZEJsb2NrKiBibG9jayA9
IGJsb2NrRm9yKHB0cik7Ci0gICAgaWYgKGNvbnRhaW5zKGJsb2NrKSkgewotICAgICAgICByZXN1
bHQgPSBibG9jazsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGJsb2NrID0gb3Zl
cnNpemVCbG9ja0ZvcihwdHIpOwotICAgIHJlc3VsdCA9IGJsb2NrOwotICAgIHJldHVybiBjb250
YWlucyhibG9jayk7Ci19Ci0KLWlubGluZSB2b2lkIENvcGllZFNwYWNlOjpwaW4oQ29waWVkQmxv
Y2sqIGJsb2NrKQotewotICAgIGJsb2NrLT5tX2lzUGlubmVkID0gdHJ1ZTsKLX0KLQotaW5saW5l
IHZvaWQgQ29waWVkU3BhY2U6OnBpbklmTmVjZXNzYXJ5KHZvaWQqIG9wYXF1ZVBvaW50ZXIpCi17
Ci0gICAgLy8gUG9pbnRlcnMgaW50byB0aGUgY29waWVkIHNwYWNlIGNvbWUgaW4gdGhlIGZvbGxv
d2luZyB2YXJpZXRpZXM6Ci0gICAgLy8gMSkgIFBvaW50ZXJzIHRvIHRoZSBzdGFydCBvZiBhIHNw
YW4gb2YgbWVtb3J5LiBUaGlzIGlzIHRoZSBtb3N0Ci0gICAgLy8gICAgIG5hdHVyYWwgdGhvdWdo
IG5vdCBuZWNlc3NhcmlseSB0aGUgbW9zdCBjb21tb24uCi0gICAgLy8gMikgIFBvaW50ZXJzIHRv
IG9uZSB2YWx1ZS1zaXplZCAoOCBieXRlKSB3b3JkIHBhc3QgdGhlIGVuZCBvZgotICAgIC8vICAg
ICBhIHNwYW4gb2YgbWVtb3J5LiBUaGlzIGN1cnJlbnRseSBvY2N1cnMgd2l0aCBzZW1pLWJ1dHRl
cmZsaWVzCi0gICAgLy8gICAgIGFuZCBzaG91bGQgYmUgZml4ZWQgc29vbiwgb25jZSB0aGUgb3Ro
ZXIgaGFsZiBvZiB0aGUKLSAgICAvLyAgICAgYnV0dGVyZmx5IGxhbmRzLgotICAgIC8vIDMpICBQ
b2ludGVycyB0byB0aGUgaW5uYXJkcyBhcmlzaW5nIGZyb20gbG9vcCBpbmR1Y3Rpb24gdmFyaWFi
bGUKLSAgICAvLyAgICAgb3B0aW1pemF0aW9ucyAoZWl0aGVyIG1hbnVhbCBvbmVzIG9yIGF1dG9t
YXRpYywgYnkgdGhlCi0gICAgLy8gICAgIGNvbXBpbGVyKS4KLSAgICAvLyA0KSAgUG9pbnRlcnMg
dG8gdGhlIGVuZCBvZiBhIHNwYW4gb2YgbWVtb3J5IGluIGFyaXNpbmcgZnJvbQotICAgIC8vICAg
ICBpbmR1Y3Rpb24gdmFyaWFibGUgb3B0aW1pemF0aW9ucyBjb21iaW5lZCB3aXRoIHRoZQotICAg
IC8vICAgICBHQy10by1jb21waWxlciBjb250cmFjdCBsYWlkIG91dCBpbiB0aGUgQyBzcGVjOiBh
IHBvaW50ZXIgdG8KLSAgICAvLyAgICAgdGhlIGVuZCBvZiBhIHNwYW4gb2YgbWVtb3J5IG11c3Qg
YmUgY29uc2lkZXJlZCB0byBiZSBhCi0gICAgLy8gICAgIHBvaW50ZXIgdG8gdGhhdCBtZW1vcnku
Ci0gICAgCi0gICAgRW5jb2RlZEpTVmFsdWUqIHBvaW50ZXIgPSByZWludGVycHJldF9jYXN0PEVu
Y29kZWRKU1ZhbHVlKj4ob3BhcXVlUG9pbnRlcik7Ci0gICAgQ29waWVkQmxvY2sqIGJsb2NrOwot
Ci0gICAgLy8gSGFuZGxlICgxKSBhbmQgKDMpLgotICAgIGlmIChjb250YWlucyhwb2ludGVyLCBi
bG9jaykpCi0gICAgICAgIHBpbihibG9jayk7Ci0gICAgCi0gICAgLy8gSGFuZGxlICg0KS4gV2Ug
ZG9uJ3QgaGF2ZSB0byBleHBsaWNpdGx5IGNoZWNrIGFuZCBwaW4gdGhlIGJsb2NrIHVuZGVyIHRo
aXMKLSAgICAvLyBwb2ludGVyIGJlY2F1c2UgaXQgY2Fubm90IHBvc3NpYmx5IHBvaW50IHRvIHNv
bWV0aGluZyB0aGF0IGNhc2VzICgxKSBhbmQKLSAgICAvLyAoMykgYWJvdmUgb3IgY2FzZSAoMikg
YmVsb3cgd291bGRuJ3QgYWxyZWFkeSBjYXRjaC4KLSAgICBwb2ludGVyLS07Ci0gICAgCi0gICAg
Ly8gSGFuZGxlICgyKQotICAgIHBvaW50ZXItLTsKLSAgICBpZiAoY29udGFpbnMocG9pbnRlciwg
YmxvY2spKQotICAgICAgICBwaW4oYmxvY2spOwotfQotCi1pbmxpbmUgdm9pZCBDb3BpZWRTcGFj
ZTo6cmVjeWNsZUV2YWN1YXRlZEJsb2NrKENvcGllZEJsb2NrKiBibG9jaykKLXsKLSAgICBBU1NF
UlQoYmxvY2spOwotICAgIEFTU0VSVChibG9jay0+Y2FuQmVSZWN5Y2xlZCgpKTsKLSAgICBBU1NF
UlQoIWJsb2NrLT5tX2lzUGlubmVkKTsKLSAgICB7Ci0gICAgICAgIFNwaW5Mb2NrSG9sZGVyIGxv
Y2tlcigmbV90b1NwYWNlTG9jayk7Ci0gICAgICAgIG1fYmxvY2tTZXQucmVtb3ZlKGJsb2NrKTsK
LSAgICAgICAgbV9mcm9tU3BhY2UtPnJlbW92ZShibG9jayk7Ci0gICAgfQotICAgIG1faGVhcC0+
YmxvY2tBbGxvY2F0b3IoKS5kZWFsbG9jYXRlKENvcGllZEJsb2NrOjpkZXN0cm95KGJsb2NrKSk7
Ci19Ci0KLWlubGluZSB2b2lkIENvcGllZFNwYWNlOjpyZWN5Y2xlQm9ycm93ZWRCbG9jayhDb3Bp
ZWRCbG9jayogYmxvY2spCi17Ci0gICAgbV9oZWFwLT5ibG9ja0FsbG9jYXRvcigpLmRlYWxsb2Nh
dGUoQ29waWVkQmxvY2s6OmRlc3Ryb3koYmxvY2spKTsKLQotICAgIHsKLSAgICAgICAgTXV0ZXhM
b2NrZXIgbG9ja2VyKG1fbG9hbmVkQmxvY2tzTG9jayk7Ci0gICAgICAgIEFTU0VSVChtX251bWJl
ck9mTG9hbmVkQmxvY2tzID4gMCk7Ci0gICAgICAgIEFTU0VSVChtX2luQ29weWluZ1BoYXNlKTsK
LSAgICAgICAgbV9udW1iZXJPZkxvYW5lZEJsb2Nrcy0tOwotICAgICAgICBpZiAoIW1fbnVtYmVy
T2ZMb2FuZWRCbG9ja3MpCi0gICAgICAgICAgICBtX2xvYW5lZEJsb2Nrc0NvbmRpdGlvbi5zaWdu
YWwoKTsKLSAgICB9Ci19Ci0KLWlubGluZSBDb3BpZWRCbG9jayogQ29waWVkU3BhY2U6OmFsbG9j
YXRlQmxvY2tGb3JDb3B5aW5nUGhhc2UoKQotewotICAgIEFTU0VSVChtX2luQ29weWluZ1BoYXNl
KTsKLSAgICBDb3BpZWRCbG9jayogYmxvY2sgPSBDb3BpZWRCbG9jazo6Y3JlYXRlTm9aZXJvRmls
bChtX2hlYXAtPmJsb2NrQWxsb2NhdG9yKCkuYWxsb2NhdGU8Q29waWVkQmxvY2s+KCkpOwotCi0g
ICAgewotICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9sb2FuZWRCbG9ja3NMb2NrKTsKLSAg
ICAgICAgbV9udW1iZXJPZkxvYW5lZEJsb2NrcysrOwotICAgIH0KLQotICAgIEFTU0VSVCghYmxv
Y2stPmRhdGFTaXplKCkpOwotICAgIHJldHVybiBibG9jazsKLX0KLQotaW5saW5lIHZvaWQgQ29w
aWVkU3BhY2U6OmFsbG9jYXRlQmxvY2soKQotewotICAgIGlmIChtX2hlYXAtPnNob3VsZENvbGxl
Y3QoKSkKLSAgICAgICAgbV9oZWFwLT5jb2xsZWN0KEhlYXA6OkRvTm90U3dlZXApOwotCi0gICAg
bV9hbGxvY2F0b3IucmVzZXRDdXJyZW50QmxvY2soKTsKLSAgICAKLSAgICBDb3BpZWRCbG9jayog
YmxvY2sgPSBDb3BpZWRCbG9jazo6Y3JlYXRlKG1faGVhcC0+YmxvY2tBbGxvY2F0b3IoKS5hbGxv
Y2F0ZTxDb3BpZWRCbG9jaz4oKSk7Ci0gICAgICAgIAotICAgIG1fdG9TcGFjZS0+cHVzaChibG9j
ayk7Ci0gICAgbV9ibG9ja0ZpbHRlci5hZGQocmVpbnRlcnByZXRfY2FzdDxCaXRzPihibG9jaykp
OwotICAgIG1fYmxvY2tTZXQuYWRkKGJsb2NrKTsKLSAgICBtX2FsbG9jYXRvci5zZXRDdXJyZW50
QmxvY2soYmxvY2spOwotfQotCi1pbmxpbmUgQ2hlY2tlZEJvb2xlYW4gQ29waWVkU3BhY2U6OnRy
eUFsbG9jYXRlKHNpemVfdCBieXRlcywgdm9pZCoqIG91dFB0cikKLXsKLSAgICBBU1NFUlQoIW1f
aGVhcC0+Z2xvYmFsRGF0YSgpLT5pc0luaXRpYWxpemluZ09iamVjdCgpKTsKLQotICAgIGlmIChp
c092ZXJzaXplKGJ5dGVzKSB8fCAhbV9hbGxvY2F0b3IudHJ5QWxsb2NhdGUoYnl0ZXMsIG91dFB0
cikpCi0gICAgICAgIHJldHVybiB0cnlBbGxvY2F0ZVNsb3dDYXNlKGJ5dGVzLCBvdXRQdHIpOwot
ICAgIAotICAgIEFTU0VSVCgqb3V0UHRyKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotaW5saW5l
IGJvb2wgQ29waWVkU3BhY2U6OmlzT3ZlcnNpemUoc2l6ZV90IGJ5dGVzKQotewotICAgIHJldHVy
biBieXRlcyA+IHNfbWF4QWxsb2NhdGlvblNpemU7Ci19Ci0KLWlubGluZSBib29sIENvcGllZFNw
YWNlOjppc1Bpbm5lZCh2b2lkKiBwdHIpCi17Ci0gICAgcmV0dXJuIGJsb2NrRm9yKHB0ciktPm1f
aXNQaW5uZWQ7Ci19Ci0KLWlubGluZSBDb3BpZWRCbG9jayogQ29waWVkU3BhY2U6Om92ZXJzaXpl
QmxvY2tGb3Iodm9pZCogcHRyKQotewotICAgIHJldHVybiByZWludGVycHJldF9jYXN0PENvcGll
ZEJsb2NrKj4ocmVpbnRlcnByZXRfY2FzdDxzaXplX3Q+KHB0cikgJiBXVEY6OnBhZ2VNYXNrKCkp
OwotfQotCi1pbmxpbmUgQ29waWVkQmxvY2sqIENvcGllZFNwYWNlOjpibG9ja0Zvcih2b2lkKiBw
dHIpCi17Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Q29waWVkQmxvY2sqPihyZWludGVy
cHJldF9jYXN0PHNpemVfdD4ocHRyKSAmIHNfYmxvY2tNYXNrKTsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgSlNDCi0KLSNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVk
U3BhY2VJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
Q29waWVkU3BhY2VJbmxpbmVzLmgJKHJldmlzaW9uIDEzMzM4OSkJKGZyb20gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2VJbmxpbmVNZXRob2RzLmg6MTMzMzg5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2VJbmxpbmVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBDb3BpZWRTcGFjZUlubGluZU1ldGhvZHNfaAorI2RlZmluZSBD
b3BpZWRTcGFjZUlubGluZU1ldGhvZHNfaAorCisjaW5jbHVkZSAiQ29waWVkQmxvY2suaCIKKyNp
bmNsdWRlICJDb3BpZWRTcGFjZS5oIgorI2luY2x1ZGUgIkhlYXAuaCIKKyNpbmNsdWRlICJIZWFw
QmxvY2suaCIKKyNpbmNsdWRlICJKU0dsb2JhbERhdGEuaCIKKyNpbmNsdWRlIDx3dGYvQ2hlY2tl
ZEJvb2xlYW4uaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2lubGluZSBib29sIENvcGllZFNwYWNl
Ojpjb250YWlucyhDb3BpZWRCbG9jayogYmxvY2spCit7CisgICAgcmV0dXJuICFtX2Jsb2NrRmls
dGVyLnJ1bGVPdXQocmVpbnRlcnByZXRfY2FzdDxCaXRzPihibG9jaykpICYmIG1fYmxvY2tTZXQu
Y29udGFpbnMoYmxvY2spOworfQorCitpbmxpbmUgYm9vbCBDb3BpZWRTcGFjZTo6Y29udGFpbnMo
dm9pZCogcHRyLCBDb3BpZWRCbG9jayomIHJlc3VsdCkKK3sKKyAgICBDb3BpZWRCbG9jayogYmxv
Y2sgPSBibG9ja0ZvcihwdHIpOworICAgIGlmIChjb250YWlucyhibG9jaykpIHsKKyAgICAgICAg
cmVzdWx0ID0gYmxvY2s7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBibG9jayA9
IG92ZXJzaXplQmxvY2tGb3IocHRyKTsKKyAgICByZXN1bHQgPSBibG9jazsKKyAgICByZXR1cm4g
Y29udGFpbnMoYmxvY2spOworfQorCitpbmxpbmUgdm9pZCBDb3BpZWRTcGFjZTo6cGluKENvcGll
ZEJsb2NrKiBibG9jaykKK3sKKyAgICBibG9jay0+bV9pc1Bpbm5lZCA9IHRydWU7Cit9CisKK2lu
bGluZSB2b2lkIENvcGllZFNwYWNlOjpwaW5JZk5lY2Vzc2FyeSh2b2lkKiBvcGFxdWVQb2ludGVy
KQoreworICAgIC8vIFBvaW50ZXJzIGludG8gdGhlIGNvcGllZCBzcGFjZSBjb21lIGluIHRoZSBm
b2xsb3dpbmcgdmFyaWV0aWVzOgorICAgIC8vIDEpICBQb2ludGVycyB0byB0aGUgc3RhcnQgb2Yg
YSBzcGFuIG9mIG1lbW9yeS4gVGhpcyBpcyB0aGUgbW9zdAorICAgIC8vICAgICBuYXR1cmFsIHRo
b3VnaCBub3QgbmVjZXNzYXJpbHkgdGhlIG1vc3QgY29tbW9uLgorICAgIC8vIDIpICBQb2ludGVy
cyB0byBvbmUgdmFsdWUtc2l6ZWQgKDggYnl0ZSkgd29yZCBwYXN0IHRoZSBlbmQgb2YKKyAgICAv
LyAgICAgYSBzcGFuIG9mIG1lbW9yeS4gVGhpcyBjdXJyZW50bHkgb2NjdXJzIHdpdGggc2VtaS1i
dXR0ZXJmbGllcworICAgIC8vICAgICBhbmQgc2hvdWxkIGJlIGZpeGVkIHNvb24sIG9uY2UgdGhl
IG90aGVyIGhhbGYgb2YgdGhlCisgICAgLy8gICAgIGJ1dHRlcmZseSBsYW5kcy4KKyAgICAvLyAz
KSAgUG9pbnRlcnMgdG8gdGhlIGlubmFyZHMgYXJpc2luZyBmcm9tIGxvb3AgaW5kdWN0aW9uIHZh
cmlhYmxlCisgICAgLy8gICAgIG9wdGltaXphdGlvbnMgKGVpdGhlciBtYW51YWwgb25lcyBvciBh
dXRvbWF0aWMsIGJ5IHRoZQorICAgIC8vICAgICBjb21waWxlcikuCisgICAgLy8gNCkgIFBvaW50
ZXJzIHRvIHRoZSBlbmQgb2YgYSBzcGFuIG9mIG1lbW9yeSBpbiBhcmlzaW5nIGZyb20KKyAgICAv
LyAgICAgaW5kdWN0aW9uIHZhcmlhYmxlIG9wdGltaXphdGlvbnMgY29tYmluZWQgd2l0aCB0aGUK
KyAgICAvLyAgICAgR0MtdG8tY29tcGlsZXIgY29udHJhY3QgbGFpZCBvdXQgaW4gdGhlIEMgc3Bl
YzogYSBwb2ludGVyIHRvCisgICAgLy8gICAgIHRoZSBlbmQgb2YgYSBzcGFuIG9mIG1lbW9yeSBt
dXN0IGJlIGNvbnNpZGVyZWQgdG8gYmUgYQorICAgIC8vICAgICBwb2ludGVyIHRvIHRoYXQgbWVt
b3J5LgorICAgIAorICAgIEVuY29kZWRKU1ZhbHVlKiBwb2ludGVyID0gcmVpbnRlcnByZXRfY2Fz
dDxFbmNvZGVkSlNWYWx1ZSo+KG9wYXF1ZVBvaW50ZXIpOworICAgIENvcGllZEJsb2NrKiBibG9j
azsKKworICAgIC8vIEhhbmRsZSAoMSkgYW5kICgzKS4KKyAgICBpZiAoY29udGFpbnMocG9pbnRl
ciwgYmxvY2spKQorICAgICAgICBwaW4oYmxvY2spOworICAgIAorICAgIC8vIEhhbmRsZSAoNCku
IFdlIGRvbid0IGhhdmUgdG8gZXhwbGljaXRseSBjaGVjayBhbmQgcGluIHRoZSBibG9jayB1bmRl
ciB0aGlzCisgICAgLy8gcG9pbnRlciBiZWNhdXNlIGl0IGNhbm5vdCBwb3NzaWJseSBwb2ludCB0
byBzb21ldGhpbmcgdGhhdCBjYXNlcyAoMSkgYW5kCisgICAgLy8gKDMpIGFib3ZlIG9yIGNhc2Ug
KDIpIGJlbG93IHdvdWxkbid0IGFscmVhZHkgY2F0Y2guCisgICAgcG9pbnRlci0tOworICAgIAor
ICAgIC8vIEhhbmRsZSAoMikKKyAgICBwb2ludGVyLS07CisgICAgaWYgKGNvbnRhaW5zKHBvaW50
ZXIsIGJsb2NrKSkKKyAgICAgICAgcGluKGJsb2NrKTsKK30KKworaW5saW5lIHZvaWQgQ29waWVk
U3BhY2U6OnJlY3ljbGVFdmFjdWF0ZWRCbG9jayhDb3BpZWRCbG9jayogYmxvY2spCit7CisgICAg
QVNTRVJUKGJsb2NrKTsKKyAgICBBU1NFUlQoYmxvY2stPmNhbkJlUmVjeWNsZWQoKSk7CisgICAg
QVNTRVJUKCFibG9jay0+bV9pc1Bpbm5lZCk7CisgICAgeworICAgICAgICBTcGluTG9ja0hvbGRl
ciBsb2NrZXIoJm1fdG9TcGFjZUxvY2spOworICAgICAgICBtX2Jsb2NrU2V0LnJlbW92ZShibG9j
ayk7CisgICAgICAgIG1fZnJvbVNwYWNlLT5yZW1vdmUoYmxvY2spOworICAgIH0KKyAgICBtX2hl
YXAtPmJsb2NrQWxsb2NhdG9yKCkuZGVhbGxvY2F0ZShDb3BpZWRCbG9jazo6ZGVzdHJveShibG9j
aykpOworfQorCitpbmxpbmUgdm9pZCBDb3BpZWRTcGFjZTo6cmVjeWNsZUJvcnJvd2VkQmxvY2so
Q29waWVkQmxvY2sqIGJsb2NrKQoreworICAgIG1faGVhcC0+YmxvY2tBbGxvY2F0b3IoKS5kZWFs
bG9jYXRlKENvcGllZEJsb2NrOjpkZXN0cm95KGJsb2NrKSk7CisKKyAgICB7CisgICAgICAgIE11
dGV4TG9ja2VyIGxvY2tlcihtX2xvYW5lZEJsb2Nrc0xvY2spOworICAgICAgICBBU1NFUlQobV9u
dW1iZXJPZkxvYW5lZEJsb2NrcyA+IDApOworICAgICAgICBBU1NFUlQobV9pbkNvcHlpbmdQaGFz
ZSk7CisgICAgICAgIG1fbnVtYmVyT2ZMb2FuZWRCbG9ja3MtLTsKKyAgICAgICAgaWYgKCFtX251
bWJlck9mTG9hbmVkQmxvY2tzKQorICAgICAgICAgICAgbV9sb2FuZWRCbG9ja3NDb25kaXRpb24u
c2lnbmFsKCk7CisgICAgfQorfQorCitpbmxpbmUgQ29waWVkQmxvY2sqIENvcGllZFNwYWNlOjph
bGxvY2F0ZUJsb2NrRm9yQ29weWluZ1BoYXNlKCkKK3sKKyAgICBBU1NFUlQobV9pbkNvcHlpbmdQ
aGFzZSk7CisgICAgQ29waWVkQmxvY2sqIGJsb2NrID0gQ29waWVkQmxvY2s6OmNyZWF0ZU5vWmVy
b0ZpbGwobV9oZWFwLT5ibG9ja0FsbG9jYXRvcigpLmFsbG9jYXRlPENvcGllZEJsb2NrPigpKTsK
KworICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbG9hbmVkQmxvY2tzTG9jayk7
CisgICAgICAgIG1fbnVtYmVyT2ZMb2FuZWRCbG9ja3MrKzsKKyAgICB9CisKKyAgICBBU1NFUlQo
IWJsb2NrLT5kYXRhU2l6ZSgpKTsKKyAgICByZXR1cm4gYmxvY2s7Cit9CisKK2lubGluZSB2b2lk
IENvcGllZFNwYWNlOjphbGxvY2F0ZUJsb2NrKCkKK3sKKyAgICBpZiAobV9oZWFwLT5zaG91bGRD
b2xsZWN0KCkpCisgICAgICAgIG1faGVhcC0+Y29sbGVjdChIZWFwOjpEb05vdFN3ZWVwKTsKKwor
ICAgIG1fYWxsb2NhdG9yLnJlc2V0Q3VycmVudEJsb2NrKCk7CisgICAgCisgICAgQ29waWVkQmxv
Y2sqIGJsb2NrID0gQ29waWVkQmxvY2s6OmNyZWF0ZShtX2hlYXAtPmJsb2NrQWxsb2NhdG9yKCku
YWxsb2NhdGU8Q29waWVkQmxvY2s+KCkpOworICAgICAgICAKKyAgICBtX3RvU3BhY2UtPnB1c2go
YmxvY2spOworICAgIG1fYmxvY2tGaWx0ZXIuYWRkKHJlaW50ZXJwcmV0X2Nhc3Q8Qml0cz4oYmxv
Y2spKTsKKyAgICBtX2Jsb2NrU2V0LmFkZChibG9jayk7CisgICAgbV9hbGxvY2F0b3Iuc2V0Q3Vy
cmVudEJsb2NrKGJsb2NrKTsKK30KKworaW5saW5lIENoZWNrZWRCb29sZWFuIENvcGllZFNwYWNl
Ojp0cnlBbGxvY2F0ZShzaXplX3QgYnl0ZXMsIHZvaWQqKiBvdXRQdHIpCit7CisgICAgQVNTRVJU
KCFtX2hlYXAtPmdsb2JhbERhdGEoKS0+aXNJbml0aWFsaXppbmdPYmplY3QoKSk7CisKKyAgICBp
ZiAoaXNPdmVyc2l6ZShieXRlcykgfHwgIW1fYWxsb2NhdG9yLnRyeUFsbG9jYXRlKGJ5dGVzLCBv
dXRQdHIpKQorICAgICAgICByZXR1cm4gdHJ5QWxsb2NhdGVTbG93Q2FzZShieXRlcywgb3V0UHRy
KTsKKyAgICAKKyAgICBBU1NFUlQoKm91dFB0cik7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2lu
bGluZSBib29sIENvcGllZFNwYWNlOjppc092ZXJzaXplKHNpemVfdCBieXRlcykKK3sKKyAgICBy
ZXR1cm4gYnl0ZXMgPiBzX21heEFsbG9jYXRpb25TaXplOworfQorCitpbmxpbmUgYm9vbCBDb3Bp
ZWRTcGFjZTo6aXNQaW5uZWQodm9pZCogcHRyKQoreworICAgIHJldHVybiBibG9ja0ZvcihwdHIp
LT5tX2lzUGlubmVkOworfQorCitpbmxpbmUgQ29waWVkQmxvY2sqIENvcGllZFNwYWNlOjpvdmVy
c2l6ZUJsb2NrRm9yKHZvaWQqIHB0cikKK3sKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxD
b3BpZWRCbG9jayo+KHJlaW50ZXJwcmV0X2Nhc3Q8c2l6ZV90PihwdHIpICYgV1RGOjpwYWdlTWFz
aygpKTsKK30KKworaW5saW5lIENvcGllZEJsb2NrKiBDb3BpZWRTcGFjZTo6YmxvY2tGb3Iodm9p
ZCogcHRyKQoreworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PENvcGllZEJsb2NrKj4ocmVp
bnRlcnByZXRfY2FzdDxzaXplX3Q+KHB0cikgJiBzX2Jsb2NrTWFzayk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Nv
cGllZFNwYWNlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0NvcGllZFNwYWNlSW5saW5lcy5oCShyZXZpc2lvbiAxMzMzODkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
MjMsOCArMjMsOCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBDb3BpZWRTcGFj
ZUlubGluZU1ldGhvZHNfaAotI2RlZmluZSBDb3BpZWRTcGFjZUlubGluZU1ldGhvZHNfaAorI2lm
bmRlZiBDb3BpZWRTcGFjZUlubGluZXNfaAorI2RlZmluZSBDb3BpZWRTcGFjZUlubGluZXNfaAog
CiAjaW5jbHVkZSAiQ29waWVkQmxvY2suaCIKICNpbmNsdWRlICJDb3BpZWRTcGFjZS5oIgpAQCAt
MTgyLDQgKzE4Miw1IEBAIGlubGluZSBDb3BpZWRCbG9jayogQ29waWVkU3BhY2U6OmJsb2NrRm8K
IAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKLSNlbmRpZgorI2VuZGlmIC8vIENvcGllZFNwYWNlSW5s
aW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlWaXNpdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5VmlzaXRvci5j
cHAJKHJldmlzaW9uIDEzMzk3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlW
aXNpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIkNvcHlWaXNpdG9yLmgiCiAKLSNpbmNsdWRlICJDb3B5VmlzaXRv
cklubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJDb3B5VmlzaXRvcklubGluZXMuaCIKICNpbmNs
dWRlICJHQ1RocmVhZFNoYXJlZERhdGEuaCIKICNpbmNsdWRlICJKU0NlbGwuaCIKICNpbmNsdWRl
ICJKU09iamVjdC5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVZpc2l0
b3JJbmxpbmVNZXRob2RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQ29weVZpc2l0b3JJbmxpbmVNZXRob2RzLmgJKHJldmlzaW9uIDEzMzk3MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlWaXNpdG9ySW5saW5lTWV0aG9kcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDExOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBDb3B5VmlzaXRv
cklubGluZU1ldGhvZHNfaAotI2RlZmluZSBDb3B5VmlzaXRvcklubGluZU1ldGhvZHNfaAotCi0j
aW5jbHVkZSAiQ2xhc3NJbmZvLmgiCi0jaW5jbHVkZSAiQ29weVZpc2l0b3IuaCIKLSNpbmNsdWRl
ICJHQ1RocmVhZFNoYXJlZERhdGEuaCIKLSNpbmNsdWRlICJKU0NlbGwuaCIKLSNpbmNsdWRlICJK
U0Rlc3RydWN0aWJsZU9iamVjdC5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgR0NDb3B5
UGhhc2VGdW5jdG9yIDogcHVibGljIE1hcmtlZEJsb2NrOjpWb2lkRnVuY3RvciB7Ci1wdWJsaWM6
Ci0gICAgR0NDb3B5UGhhc2VGdW5jdG9yKENvcHlWaXNpdG9yJiB2aXNpdG9yKQotICAgICAgICA6
IG1fdmlzaXRvcih2aXNpdG9yKQotICAgIHsKLSAgICB9Ci0KLSAgICB2b2lkIG9wZXJhdG9yKCko
SlNDZWxsKiBjZWxsKQotICAgIHsKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjZWxs
LT5zdHJ1Y3R1cmUoKTsKLSAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5
KCkgJiYgIWhhc0luZGV4ZWRQcm9wZXJ0aWVzKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKQot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBBU1NFUlQoc3RydWN0dXJlLT5jbGFzc0luZm8o
KS0+bWV0aG9kVGFibGUuY29weUJhY2tpbmdTdG9yZSA9PSBKU09iamVjdDo6Y29weUJhY2tpbmdT
dG9yZSk7Ci0gICAgICAgIEpTT2JqZWN0Ojpjb3B5QmFja2luZ1N0b3JlKGNlbGwsIG1fdmlzaXRv
cik7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIENvcHlWaXNpdG9yJiBtX3Zpc2l0b3I7Ci19Owot
Ci1pbmxpbmUgYm9vbCBDb3B5VmlzaXRvcjo6Y2hlY2tJZlNob3VsZENvcHkodm9pZCogb2xkUHRy
LCBzaXplX3QgYnl0ZXMpCi17Ci0gICAgaWYgKENvcGllZFNwYWNlOjppc092ZXJzaXplKGJ5dGVz
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKENvcGllZFNwYWNlOjpibG9ja0Zv
cihvbGRQdHIpLT5pc1Bpbm5lZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotaW5saW5lIHZvaWQqIENvcHlWaXNpdG9yOjphbGxvY2F0ZU5ld1NwYWNl
KHNpemVfdCBieXRlcykKLXsKLSAgICB2b2lkKiByZXN1bHQgPSAwOyAvLyBDb21waWxlcnMgZG9u
J3QgcmVhbGl6ZSB0aGF0IHRoaXMgd2lsbCBiZSBhc3NpZ25lZC4KLSAgICBpZiAoTElLRUxZKG1f
Y29waWVkQWxsb2NhdG9yLnRyeUFsbG9jYXRlKGJ5dGVzLCAmcmVzdWx0KSkpCi0gICAgICAgIHJl
dHVybiByZXN1bHQ7Ci0gICAgCi0gICAgcmVzdWx0ID0gYWxsb2NhdGVOZXdTcGFjZVNsb3coYnl0
ZXMpOwotICAgIEFTU0VSVChyZXN1bHQpOwotICAgIHJldHVybiByZXN1bHQ7Ci19ICAgICAgIAot
Ci1pbmxpbmUgdm9pZCogQ29weVZpc2l0b3I6OmFsbG9jYXRlTmV3U3BhY2VTbG93KHNpemVfdCBi
eXRlcykKLXsKLSAgICBDb3BpZWRCbG9jayogbmV3QmxvY2sgPSAwOwotICAgIG1fc2hhcmVkLm1f
Y29waWVkU3BhY2UtPmRvbmVGaWxsaW5nQmxvY2sobV9jb3BpZWRBbGxvY2F0b3IucmVzZXRDdXJy
ZW50QmxvY2soKSwgJm5ld0Jsb2NrKTsKLSAgICBtX2NvcGllZEFsbG9jYXRvci5zZXRDdXJyZW50
QmxvY2sobmV3QmxvY2spOwotCi0gICAgdm9pZCogcmVzdWx0ID0gMDsKLSAgICBDaGVja2VkQm9v
bGVhbiBkaWRTdWNjZWVkID0gbV9jb3BpZWRBbGxvY2F0b3IudHJ5QWxsb2NhdGUoYnl0ZXMsICZy
ZXN1bHQpOwotICAgIEFTU0VSVChkaWRTdWNjZWVkKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQot
Ci1pbmxpbmUgdm9pZCBDb3B5VmlzaXRvcjo6c3RhcnRDb3B5aW5nKCkKLXsKLSAgICBBU1NFUlQo
IW1fY29waWVkQWxsb2NhdG9yLmlzVmFsaWQoKSk7Ci0gICAgQ29waWVkQmxvY2sqIGJsb2NrID0g
MDsKLSAgICBtX3NoYXJlZC5tX2NvcGllZFNwYWNlLT5kb25lRmlsbGluZ0Jsb2NrKG1fY29waWVk
QWxsb2NhdG9yLnJlc2V0Q3VycmVudEJsb2NrKCksICZibG9jayk7Ci0gICAgbV9jb3BpZWRBbGxv
Y2F0b3Iuc2V0Q3VycmVudEJsb2NrKGJsb2NrKTsKLX0KLQotaW5saW5lIHZvaWQgQ29weVZpc2l0
b3I6OmRvbmVDb3B5aW5nKCkKLXsKLSAgICBpZiAoIW1fY29waWVkQWxsb2NhdG9yLmlzVmFsaWQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zaGFyZWQubV9jb3BpZWRTcGFjZS0+ZG9uZUZp
bGxpbmdCbG9jayhtX2NvcGllZEFsbG9jYXRvci5yZXNldEN1cnJlbnRCbG9jaygpLCAwKTsKLX0K
LQotaW5saW5lIHZvaWQgQ29weVZpc2l0b3I6OmRpZENvcHkodm9pZCogcHRyLCBzaXplX3QgYnl0
ZXMpCi17Ci0gICAgQVNTRVJUKCFDb3BpZWRTcGFjZTo6aXNPdmVyc2l6ZShieXRlcykpOwotICAg
IENvcGllZEJsb2NrKiBibG9jayA9IENvcGllZFNwYWNlOjpibG9ja0ZvcihwdHIpOwotICAgIEFT
U0VSVCghYmxvY2stPmlzUGlubmVkKCkpOwotCi0gICAgaWYgKGJsb2NrLT5kaWRFdmFjdWF0ZUJ5
dGVzKGJ5dGVzKSkKLSAgICAgICAgbV9zaGFyZWQubV9jb3BpZWRTcGFjZS0+cmVjeWNsZUV2YWN1
YXRlZEJsb2NrKGJsb2NrKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVZpc2l0b3JJbmxpbmVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVZpc2l0b3JJbmxpbmVzLmgJ
KHJldmlzaW9uIDEzMzM4OSkJKGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVZp
c2l0b3JJbmxpbmVNZXRob2RzLmg6MTMzMzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQ29weVZpc2l0b3JJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTkgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIENvcHlWaXNpdG9ySW5saW5lTWV0aG9kc19oCisjZGVmaW5l
IENvcHlWaXNpdG9ySW5saW5lTWV0aG9kc19oCisKKyNpbmNsdWRlICJDbGFzc0luZm8uaCIKKyNp
bmNsdWRlICJDb3B5VmlzaXRvci5oIgorI2luY2x1ZGUgIkdDVGhyZWFkU2hhcmVkRGF0YS5oIgor
I2luY2x1ZGUgIkpTQ2VsbC5oIgorI2luY2x1ZGUgIkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LmgiCisK
K25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBHQ0NvcHlQaGFzZUZ1bmN0b3IgOiBwdWJsaWMgTWFy
a2VkQmxvY2s6OlZvaWRGdW5jdG9yIHsKK3B1YmxpYzoKKyAgICBHQ0NvcHlQaGFzZUZ1bmN0b3Io
Q29weVZpc2l0b3ImIHZpc2l0b3IpCisgICAgICAgIDogbV92aXNpdG9yKHZpc2l0b3IpCisgICAg
eworICAgIH0KKworICAgIHZvaWQgb3BlcmF0b3IoKShKU0NlbGwqIGNlbGwpCisgICAgeworICAg
ICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNlbGwtPnN0cnVjdHVyZSgpOworICAgICAgICBp
ZiAoIXN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAmJiAhaGFzSW5kZXhlZFByb3BlcnRp
ZXMoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIEFTU0VSVChzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLT5tZXRob2RUYWJsZS5jb3B5QmFja2lu
Z1N0b3JlID09IEpTT2JqZWN0Ojpjb3B5QmFja2luZ1N0b3JlKTsKKyAgICAgICAgSlNPYmplY3Q6
OmNvcHlCYWNraW5nU3RvcmUoY2VsbCwgbV92aXNpdG9yKTsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgQ29weVZpc2l0b3ImIG1fdmlzaXRvcjsKK307CisKK2lubGluZSBib29sIENvcHlWaXNpdG9y
OjpjaGVja0lmU2hvdWxkQ29weSh2b2lkKiBvbGRQdHIsIHNpemVfdCBieXRlcykKK3sKKyAgICBp
ZiAoQ29waWVkU3BhY2U6OmlzT3ZlcnNpemUoYnl0ZXMpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBpZiAoQ29waWVkU3BhY2U6OmJsb2NrRm9yKG9sZFB0ciktPmlzUGlubmVkKCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQorCitpbmxpbmUgdm9p
ZCogQ29weVZpc2l0b3I6OmFsbG9jYXRlTmV3U3BhY2Uoc2l6ZV90IGJ5dGVzKQoreworICAgIHZv
aWQqIHJlc3VsdCA9IDA7IC8vIENvbXBpbGVycyBkb24ndCByZWFsaXplIHRoYXQgdGhpcyB3aWxs
IGJlIGFzc2lnbmVkLgorICAgIGlmIChMSUtFTFkobV9jb3BpZWRBbGxvY2F0b3IudHJ5QWxsb2Nh
dGUoYnl0ZXMsICZyZXN1bHQpKSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAKKyAgICBy
ZXN1bHQgPSBhbGxvY2F0ZU5ld1NwYWNlU2xvdyhieXRlcyk7CisgICAgQVNTRVJUKHJlc3VsdCk7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30gICAgICAgCisKK2lubGluZSB2b2lkKiBDb3B5VmlzaXRv
cjo6YWxsb2NhdGVOZXdTcGFjZVNsb3coc2l6ZV90IGJ5dGVzKQoreworICAgIENvcGllZEJsb2Nr
KiBuZXdCbG9jayA9IDA7CisgICAgbV9zaGFyZWQubV9jb3BpZWRTcGFjZS0+ZG9uZUZpbGxpbmdC
bG9jayhtX2NvcGllZEFsbG9jYXRvci5yZXNldEN1cnJlbnRCbG9jaygpLCAmbmV3QmxvY2spOwor
ICAgIG1fY29waWVkQWxsb2NhdG9yLnNldEN1cnJlbnRCbG9jayhuZXdCbG9jayk7CisKKyAgICB2
b2lkKiByZXN1bHQgPSAwOworICAgIENoZWNrZWRCb29sZWFuIGRpZFN1Y2NlZWQgPSBtX2NvcGll
ZEFsbG9jYXRvci50cnlBbGxvY2F0ZShieXRlcywgJnJlc3VsdCk7CisgICAgQVNTRVJUKGRpZFN1
Y2NlZWQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2lubGluZSB2b2lkIENvcHlWaXNpdG9y
OjpzdGFydENvcHlpbmcoKQoreworICAgIEFTU0VSVCghbV9jb3BpZWRBbGxvY2F0b3IuaXNWYWxp
ZCgpKTsKKyAgICBDb3BpZWRCbG9jayogYmxvY2sgPSAwOworICAgIG1fc2hhcmVkLm1fY29waWVk
U3BhY2UtPmRvbmVGaWxsaW5nQmxvY2sobV9jb3BpZWRBbGxvY2F0b3IucmVzZXRDdXJyZW50Qmxv
Y2soKSwgJmJsb2NrKTsKKyAgICBtX2NvcGllZEFsbG9jYXRvci5zZXRDdXJyZW50QmxvY2soYmxv
Y2spOworfQorCitpbmxpbmUgdm9pZCBDb3B5VmlzaXRvcjo6ZG9uZUNvcHlpbmcoKQoreworICAg
IGlmICghbV9jb3BpZWRBbGxvY2F0b3IuaXNWYWxpZCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBtX3NoYXJlZC5tX2NvcGllZFNwYWNlLT5kb25lRmlsbGluZ0Jsb2NrKG1fY29waWVkQWxsb2Nh
dG9yLnJlc2V0Q3VycmVudEJsb2NrKCksIDApOworfQorCitpbmxpbmUgdm9pZCBDb3B5VmlzaXRv
cjo6ZGlkQ29weSh2b2lkKiBwdHIsIHNpemVfdCBieXRlcykKK3sKKyAgICBBU1NFUlQoIUNvcGll
ZFNwYWNlOjppc092ZXJzaXplKGJ5dGVzKSk7CisgICAgQ29waWVkQmxvY2sqIGJsb2NrID0gQ29w
aWVkU3BhY2U6OmJsb2NrRm9yKHB0cik7CisgICAgQVNTRVJUKCFibG9jay0+aXNQaW5uZWQoKSk7
CisKKyAgICBpZiAoYmxvY2stPmRpZEV2YWN1YXRlQnl0ZXMoYnl0ZXMpKQorICAgICAgICBtX3No
YXJlZC5tX2NvcGllZFNwYWNlLT5yZWN5Y2xlRXZhY3VhdGVkQmxvY2soYmxvY2spOworfQorCit9
IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9Db3B5VmlzaXRvcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9Db3B5VmlzaXRvcklubGluZXMuaAkocmV2aXNpb24gMTMzMzg5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVZpc2l0b3JJbmxpbmVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTIzLDggKzIzLDggQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
ICAqLwogCi0jaWZuZGVmIENvcHlWaXNpdG9ySW5saW5lTWV0aG9kc19oCi0jZGVmaW5lIENvcHlW
aXNpdG9ySW5saW5lTWV0aG9kc19oCisjaWZuZGVmIENvcHlWaXNpdG9ySW5saW5lc19oCisjZGVm
aW5lIENvcHlWaXNpdG9ySW5saW5lc19oCiAKICNpbmNsdWRlICJDbGFzc0luZm8uaCIKICNpbmNs
dWRlICJDb3B5VmlzaXRvci5oIgpAQCAtMTE2LDQgKzExNiw1IEBAIGlubGluZSB2b2lkIENvcHlW
aXNpdG9yOjpkaWRDb3B5KHZvaWQqIHAKIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKLSNlbmRpZgor
I2VuZGlmIC8vIENvcHlWaXNpdG9ySW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0dDVGhyZWFkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9HQ1RocmVhZC5jcHAJKHJldmlzaW9uIDEzMzk3MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0dDVGhyZWFkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBA
QAogI2luY2x1ZGUgIkdDVGhyZWFkLmgiCiAKICNpbmNsdWRlICJDb3B5VmlzaXRvci5oIgotI2lu
Y2x1ZGUgIkNvcHlWaXNpdG9ySW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkNvcHlWaXNpdG9y
SW5saW5lcy5oIgogI2luY2x1ZGUgIkdDVGhyZWFkU2hhcmVkRGF0YS5oIgogI2luY2x1ZGUgIlNs
b3RWaXNpdG9yLmgiCiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0dDVGhyZWFkU2hhcmVkRGF0YS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NUaHJlYWRTaGFyZWREYXRhLmNwcAkocmV2aXNp
b24gMTMzOTczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NUaHJlYWRTaGFyZWRE
YXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsMTIgKzI3LDEyIEBACiAjaW5jbHVkZSAiR0NU
aHJlYWRTaGFyZWREYXRhLmgiCiAKICNpbmNsdWRlICJDb3B5VmlzaXRvci5oIgotI2luY2x1ZGUg
IkNvcHlWaXNpdG9ySW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkNvcHlWaXNpdG9ySW5saW5l
cy5oIgogI2luY2x1ZGUgIkdDVGhyZWFkLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgiCiAj
aW5jbHVkZSAiTWFya1N0YWNrLmgiCiAjaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKLSNpbmNsdWRl
ICJTbG90VmlzaXRvcklubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJTbG90VmlzaXRvcklubGlu
ZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hhbmRsZVN0YWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9IYW5kbGVTdGFjay5jcHAJKHJldmlzaW9uIDEzMzk3MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hhbmRsZVN0YWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsOCArMjcs
OCBAQAogI2luY2x1ZGUgIkhhbmRsZVN0YWNrLmgiCiAKICNpbmNsdWRlICJIZWFwUm9vdFZpc2l0
b3IuaCIKLSNpbmNsdWRlICJKU1ZhbHVlSW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUgIkpTT2Jq
ZWN0LmgiCisjaW5jbHVkZSAiSlNWYWx1ZUlubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lvbiAxMzM5NzMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjQsOCArMjQsOCBAQAogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkNvbnNlcnZh
dGl2ZVJvb3RzLmgiCiAjaW5jbHVkZSAiQ29waWVkU3BhY2UuaCIKLSNpbmNsdWRlICJDb3BpZWRT
cGFjZUlubGluZU1ldGhvZHMuaCIKLSNpbmNsdWRlICJDb3B5VmlzaXRvcklubGluZU1ldGhvZHMu
aCIKKyNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZXMuaCIKKyNpbmNsdWRlICJDb3B5VmlzaXRv
cklubGluZXMuaCIKICNpbmNsdWRlICJHQ0FjdGl2aXR5Q2FsbGJhY2suaCIKICNpbmNsdWRlICJI
ZWFwUm9vdFZpc2l0b3IuaCIKICNpbmNsdWRlICJIZWFwU3RhdGlzdGljcy5oIgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFJvb3RWaXNpdG9yLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFJvb3RWaXNpdG9yLmgJKHJldmlzaW9uIDEz
Mzk3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBSb290VmlzaXRvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAjZGVmaW5lIEhlYXBSb290VmlzaXRvcl9o
CiAKICNpbmNsdWRlICJTbG90VmlzaXRvci5oIgotI2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5l
TWV0aG9kcy5oIgorI2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5lcy5oIgogCiBuYW1lc3BhY2Ug
SlNDIHsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2suY3BwCShy
ZXZpc2lvbiAxMzM5NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2su
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxOCArMjUsMTggQEAKIAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIk1hcmtTdGFjay5oIgotI2luY2x1ZGUgIk1hcmtTdGFja0lubGluZU1l
dGhvZHMuaCIKKyNpbmNsdWRlICJNYXJrU3RhY2tJbmxpbmVzLmgiCiAKLSNpbmNsdWRlICJDb3Bp
ZWRTcGFjZS5oIgotI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oIgogI2luY2x1
ZGUgIkNvbnNlcnZhdGl2ZVJvb3RzLmgiCisjaW5jbHVkZSAiQ29waWVkU3BhY2UuaCIKKyNpbmNs
dWRlICJDb3BpZWRTcGFjZUlubGluZXMuaCIKICNpbmNsdWRlICJIZWFwLmgiCiAjaW5jbHVkZSAi
T3B0aW9ucy5oIgogI2luY2x1ZGUgIkpTQXJyYXkuaCIKICNpbmNsdWRlICJKU0NlbGwuaCIKICNp
bmNsdWRlICJKU09iamVjdC5oIgogCi0jaW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVNZXRob2Rz
LmgiCisjaW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJl
LmgiCiAjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCiAjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFja0lubGluZU1ldGhvZHMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2tJbmxp
bmVNZXRob2RzLmgJKHJldmlzaW9uIDEzMzk3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtTdGFja0lubGluZU1ldGhvZHMuaAkod29ya2luZyBjb3B5KQpAQCAtMSwxMTMgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwot
Ci0jaWZuZGVmIE1hcmtTdGFja0lubGluZU1ldGhvZHNfaAotI2RlZmluZSBNYXJrU3RhY2tJbmxp
bmVNZXRob2RzX2gKLQotI2luY2x1ZGUgIkdDVGhyZWFkU2hhcmVkRGF0YS5oIgotI2luY2x1ZGUg
Ik1hcmtTdGFjay5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotaW5saW5lIHNpemVfdCBNYXJrU3Rh
Y2tBcnJheTo6cG9zdEluY1RvcCgpCi17Ci0gICAgc2l6ZV90IHJlc3VsdCA9IG1fdG9wKys7Ci0g
ICAgQVNTRVJUKHJlc3VsdCA9PSBtX3RvcFNlZ21lbnQtPm1fdG9wKyspOwotICAgIHJldHVybiBy
ZXN1bHQ7Ci19Ci0gICAgICAgIAotaW5saW5lIHNpemVfdCBNYXJrU3RhY2tBcnJheTo6cHJlRGVj
VG9wKCkKLXsKLSAgICBzaXplX3QgcmVzdWx0ID0gLS1tX3RvcDsKLSAgICBBU1NFUlQocmVzdWx0
ID09IC0tbV90b3BTZWdtZW50LT5tX3RvcCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLSAgICAg
ICAgCi1pbmxpbmUgdm9pZCBNYXJrU3RhY2tBcnJheTo6c2V0VG9wRm9yRnVsbFNlZ21lbnQoKQot
ewotICAgIEFTU0VSVChtX3RvcFNlZ21lbnQtPm1fdG9wID09IG1fc2VnbWVudENhcGFjaXR5KTsK
LSAgICBtX3RvcCA9IG1fc2VnbWVudENhcGFjaXR5OwotfQotCi1pbmxpbmUgdm9pZCBNYXJrU3Rh
Y2tBcnJheTo6c2V0VG9wRm9yRW1wdHlTZWdtZW50KCkKLXsKLSAgICBBU1NFUlQoIW1fdG9wU2Vn
bWVudC0+bV90b3ApOwotICAgIG1fdG9wID0gMDsKLX0KLQotaW5saW5lIHNpemVfdCBNYXJrU3Rh
Y2tBcnJheTo6dG9wKCkKLXsKLSAgICBBU1NFUlQobV90b3AgPT0gbV90b3BTZWdtZW50LT5tX3Rv
cCk7Ci0gICAgcmV0dXJuIG1fdG9wOwotfQotCi0jaWYgQVNTRVJUX0RJU0FCTEVECi1pbmxpbmUg
dm9pZCBNYXJrU3RhY2tBcnJheTo6dmFsaWRhdGVQcmV2aW91cygpIHsgfQotI2Vsc2UKLWlubGlu
ZSB2b2lkIE1hcmtTdGFja0FycmF5Ojp2YWxpZGF0ZVByZXZpb3VzKCkKLXsKLSAgICB1bnNpZ25l
ZCBjb3VudCA9IDA7Ci0gICAgZm9yIChNYXJrU3RhY2tTZWdtZW50KiBjdXJyZW50ID0gbV90b3BT
ZWdtZW50LT5tX3ByZXZpb3VzOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+bV9wcmV2aW91
cykKLSAgICAgICAgY291bnQrKzsKLSAgICBBU1NFUlQoY291bnQgPT0gbV9udW1iZXJPZlByZXZp
b3VzU2VnbWVudHMpOwotfQotI2VuZGlmCi0KLWlubGluZSB2b2lkIE1hcmtTdGFja0FycmF5Ojph
cHBlbmQoY29uc3QgSlNDZWxsKiBjZWxsKQotewotICAgIGlmIChtX3RvcCA9PSBtX3NlZ21lbnRD
YXBhY2l0eSkKLSAgICAgICAgZXhwYW5kKCk7Ci0gICAgbV90b3BTZWdtZW50LT5kYXRhKClbcG9z
dEluY1RvcCgpXSA9IGNlbGw7Ci19Ci0KLWlubGluZSBib29sIE1hcmtTdGFja0FycmF5OjpjYW5S
ZW1vdmVMYXN0KCkKLXsKLSAgICByZXR1cm4gISFtX3RvcDsKLX0KLQotaW5saW5lIGNvbnN0IEpT
Q2VsbCogTWFya1N0YWNrQXJyYXk6OnJlbW92ZUxhc3QoKQotewotICAgIHJldHVybiBtX3RvcFNl
Z21lbnQtPmRhdGEoKVtwcmVEZWNUb3AoKV07Ci19Ci0KLWlubGluZSBib29sIE1hcmtTdGFja0Fy
cmF5Ojppc0VtcHR5KCkKLXsKLSAgICBpZiAobV90b3ApCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBpZiAobV90b3BTZWdtZW50LT5tX3ByZXZpb3VzKSB7Ci0gICAgICAgIEFTU0VSVChtX3Rv
cFNlZ21lbnQtPm1fcHJldmlvdXMtPm1fdG9wID09IG1fc2VnbWVudENhcGFjaXR5KTsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotaW5saW5lIHNp
emVfdCBNYXJrU3RhY2tBcnJheTo6c2l6ZSgpCi17Ci0gICAgcmV0dXJuIG1fdG9wICsgbV9zZWdt
ZW50Q2FwYWNpdHkgKiBtX251bWJlck9mUHJldmlvdXNTZWdtZW50czsKLX0KLQotfSAvLyBuYW1l
c3BhY2UgSlNDCi0KLSNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a1N0YWNrSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtTdGFja0lubGluZXMuaAkocmV2aXNpb24gMTMzMzg5KQkoZnJvbSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJrU3RhY2tJbmxpbmVNZXRob2RzLmg6MTMzMzg5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTEzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDExIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgTWFya1N0YWNrSW5saW5lTWV0aG9kc19oCisjZGVmaW5lIE1h
cmtTdGFja0lubGluZU1ldGhvZHNfaAorCisjaW5jbHVkZSAiR0NUaHJlYWRTaGFyZWREYXRhLmgi
CisjaW5jbHVkZSAiTWFya1N0YWNrLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitpbmxpbmUgc2l6
ZV90IE1hcmtTdGFja0FycmF5Ojpwb3N0SW5jVG9wKCkKK3sKKyAgICBzaXplX3QgcmVzdWx0ID0g
bV90b3ArKzsKKyAgICBBU1NFUlQocmVzdWx0ID09IG1fdG9wU2VnbWVudC0+bV90b3ArKyk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKyAgICAgICAgCitpbmxpbmUgc2l6ZV90IE1hcmtTdGFja0Fy
cmF5OjpwcmVEZWNUb3AoKQoreworICAgIHNpemVfdCByZXN1bHQgPSAtLW1fdG9wOworICAgIEFT
U0VSVChyZXN1bHQgPT0gLS1tX3RvcFNlZ21lbnQtPm1fdG9wKTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorICAgICAgICAKK2lubGluZSB2b2lkIE1hcmtTdGFja0FycmF5OjpzZXRUb3BGb3JGdWxs
U2VnbWVudCgpCit7CisgICAgQVNTRVJUKG1fdG9wU2VnbWVudC0+bV90b3AgPT0gbV9zZWdtZW50
Q2FwYWNpdHkpOworICAgIG1fdG9wID0gbV9zZWdtZW50Q2FwYWNpdHk7Cit9CisKK2lubGluZSB2
b2lkIE1hcmtTdGFja0FycmF5OjpzZXRUb3BGb3JFbXB0eVNlZ21lbnQoKQoreworICAgIEFTU0VS
VCghbV90b3BTZWdtZW50LT5tX3RvcCk7CisgICAgbV90b3AgPSAwOworfQorCitpbmxpbmUgc2l6
ZV90IE1hcmtTdGFja0FycmF5Ojp0b3AoKQoreworICAgIEFTU0VSVChtX3RvcCA9PSBtX3RvcFNl
Z21lbnQtPm1fdG9wKTsKKyAgICByZXR1cm4gbV90b3A7Cit9CisKKyNpZiBBU1NFUlRfRElTQUJM
RUQKK2lubGluZSB2b2lkIE1hcmtTdGFja0FycmF5Ojp2YWxpZGF0ZVByZXZpb3VzKCkgeyB9Cisj
ZWxzZQoraW5saW5lIHZvaWQgTWFya1N0YWNrQXJyYXk6OnZhbGlkYXRlUHJldmlvdXMoKQorewor
ICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKKyAgICBmb3IgKE1hcmtTdGFja1NlZ21lbnQqIGN1cnJl
bnQgPSBtX3RvcFNlZ21lbnQtPm1fcHJldmlvdXM7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50
LT5tX3ByZXZpb3VzKQorICAgICAgICBjb3VudCsrOworICAgIEFTU0VSVChjb3VudCA9PSBtX251
bWJlck9mUHJldmlvdXNTZWdtZW50cyk7Cit9CisjZW5kaWYKKworaW5saW5lIHZvaWQgTWFya1N0
YWNrQXJyYXk6OmFwcGVuZChjb25zdCBKU0NlbGwqIGNlbGwpCit7CisgICAgaWYgKG1fdG9wID09
IG1fc2VnbWVudENhcGFjaXR5KQorICAgICAgICBleHBhbmQoKTsKKyAgICBtX3RvcFNlZ21lbnQt
PmRhdGEoKVtwb3N0SW5jVG9wKCldID0gY2VsbDsKK30KKworaW5saW5lIGJvb2wgTWFya1N0YWNr
QXJyYXk6OmNhblJlbW92ZUxhc3QoKQoreworICAgIHJldHVybiAhIW1fdG9wOworfQorCitpbmxp
bmUgY29uc3QgSlNDZWxsKiBNYXJrU3RhY2tBcnJheTo6cmVtb3ZlTGFzdCgpCit7CisgICAgcmV0
dXJuIG1fdG9wU2VnbWVudC0+ZGF0YSgpW3ByZURlY1RvcCgpXTsKK30KKworaW5saW5lIGJvb2wg
TWFya1N0YWNrQXJyYXk6OmlzRW1wdHkoKQoreworICAgIGlmIChtX3RvcCkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGlmIChtX3RvcFNlZ21lbnQtPm1fcHJldmlvdXMpIHsKKyAgICAgICAg
QVNTRVJUKG1fdG9wU2VnbWVudC0+bV9wcmV2aW91cy0+bV90b3AgPT0gbV9zZWdtZW50Q2FwYWNp
dHkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQor
CitpbmxpbmUgc2l6ZV90IE1hcmtTdGFja0FycmF5OjpzaXplKCkKK3sKKyAgICByZXR1cm4gbV90
b3AgKyBtX3NlZ21lbnRDYXBhY2l0eSAqIG1fbnVtYmVyT2ZQcmV2aW91c1NlZ21lbnRzOworfQor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJrU3RhY2tJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya1N0YWNrSW5saW5lcy5oCShyZXZpc2lvbiAxMzMzODkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTIzLDggKzIzLDggQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYgTWFya1N0
YWNrSW5saW5lTWV0aG9kc19oCi0jZGVmaW5lIE1hcmtTdGFja0lubGluZU1ldGhvZHNfaAorI2lm
bmRlZiBNYXJrU3RhY2tJbmxpbmVzX2gKKyNkZWZpbmUgTWFya1N0YWNrSW5saW5lc19oCiAKICNp
bmNsdWRlICJHQ1RocmVhZFNoYXJlZERhdGEuaCIKICNpbmNsdWRlICJNYXJrU3RhY2suaCIKQEAg
LTM3LDE0ICszNywxNCBAQCBpbmxpbmUgc2l6ZV90IE1hcmtTdGFja0FycmF5Ojpwb3N0SW5jVG9w
CiAgICAgQVNTRVJUKHJlc3VsdCA9PSBtX3RvcFNlZ21lbnQtPm1fdG9wKyspOwogICAgIHJldHVy
biByZXN1bHQ7CiB9Ci0gICAgICAgIAorCiBpbmxpbmUgc2l6ZV90IE1hcmtTdGFja0FycmF5Ojpw
cmVEZWNUb3AoKQogewogICAgIHNpemVfdCByZXN1bHQgPSAtLW1fdG9wOwogICAgIEFTU0VSVChy
ZXN1bHQgPT0gLS1tX3RvcFNlZ21lbnQtPm1fdG9wKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQot
ICAgICAgICAKKwogaW5saW5lIHZvaWQgTWFya1N0YWNrQXJyYXk6OnNldFRvcEZvckZ1bGxTZWdt
ZW50KCkKIHsKICAgICBBU1NFUlQobV90b3BTZWdtZW50LT5tX3RvcCA9PSBtX3NlZ21lbnRDYXBh
Y2l0eSk7CkBAIC0xMTAsNCArMTEwLDUgQEAgaW5saW5lIHNpemVfdCBNYXJrU3RhY2tBcnJheTo6
c2l6ZSgpCiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCi0jZW5kaWYKKyNlbmRpZiAvLyBNYXJrU3Rh
Y2tJbmxpbmVzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNp
dG9yLmNwcAkocmV2aXNpb24gMTMzOTczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
U2xvdFZpc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zLDcgKzMsNyBAQAogCiAjaW5jbHVk
ZSAiQ29uc2VydmF0aXZlUm9vdHMuaCIKICNpbmNsdWRlICJDb3BpZWRTcGFjZS5oIgotI2luY2x1
ZGUgIkNvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5s
aW5lcy5oIgogI2luY2x1ZGUgIkdDVGhyZWFkLmgiCiAjaW5jbHVkZSAiSlNBcnJheS5oIgogI2lu
Y2x1ZGUgIkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9TbG90VmlzaXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1Nsb3RWaXNpdG9yLmgJKHJldmlzaW9uIDEzMzk3MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcg
QEAKICNkZWZpbmUgU2xvdFZpc2l0b3JfaAogCiAjaW5jbHVkZSAiSGFuZGxlVHlwZXMuaCIKLSNp
bmNsdWRlICJNYXJrU3RhY2tJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiTWFya1N0YWNrSW5s
aW5lcy5oIgogCiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklubGluZU1ldGhvZHMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklubGluZU1ldGhv
ZHMuaAkocmV2aXNpb24gMTMzOTczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xv
dFZpc2l0b3JJbmxpbmVNZXRob2RzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTc0ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaWZuZGVmIFNsb3RWaXNpdG9ySW5saW5lTWV0aG9kc19oCi0jZGVmaW5l
IFNsb3RWaXNpdG9ySW5saW5lTWV0aG9kc19oCi0KLSNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGlu
ZU1ldGhvZHMuaCIKLSNpbmNsdWRlICJPcHRpb25zLmgiCi0jaW5jbHVkZSAiU2xvdFZpc2l0b3Iu
aCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6
YXBwZW5kKEpTVmFsdWUqIHNsb3QsIHNpemVfdCBjb3VudCkKLXsKLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgSlNWYWx1ZSYgdmFsdWUgPSBzbG90W2ld
OwotICAgICAgICBpbnRlcm5hbEFwcGVuZCh2YWx1ZSk7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBUPgotaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFVuYmFycmllcmVkUG9p
bnRlcihUKiogc2xvdCkKLXsKLSAgICBBU1NFUlQoc2xvdCk7Ci0gICAgSlNDZWxsKiBjZWxsID0g
KnNsb3Q7Ci0gICAgaW50ZXJuYWxBcHBlbmQoY2VsbCk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9p
ZCBTbG90VmlzaXRvcjo6YXBwZW5kKEpTVmFsdWUqIHNsb3QpCi17Ci0gICAgQVNTRVJUKHNsb3Qp
OwotICAgIGludGVybmFsQXBwZW5kKCpzbG90KTsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIFNs
b3RWaXNpdG9yOjphcHBlbmRVbmJhcnJpZXJlZFZhbHVlKEpTVmFsdWUqIHNsb3QpCi17Ci0gICAg
QVNTRVJUKHNsb3QpOwotICAgIGludGVybmFsQXBwZW5kKCpzbG90KTsKLX0KLQotQUxXQVlTX0lO
TElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmQoSlNDZWxsKiogc2xvdCkKLXsKLSAgICBBU1NF
UlQoc2xvdCk7Ci0gICAgaW50ZXJuYWxBcHBlbmQoKnNsb3QpOwotfQotCi1BTFdBWVNfSU5MSU5F
IHZvaWQgU2xvdFZpc2l0b3I6OmludGVybmFsQXBwZW5kKEpTVmFsdWUgdmFsdWUpCi17Ci0gICAg
aWYgKCF2YWx1ZSB8fCAhdmFsdWUuaXNDZWxsKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpbnRl
cm5hbEFwcGVuZCh2YWx1ZS5hc0NlbGwoKSk7Ci19Ci0KLWlubGluZSB2b2lkIFNsb3RWaXNpdG9y
OjphZGRXZWFrUmVmZXJlbmNlSGFydmVzdGVyKFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIqIHdlYWtS
ZWZlcmVuY2VIYXJ2ZXN0ZXIpCi17Ci0gICAgbV9zaGFyZWQubV93ZWFrUmVmZXJlbmNlSGFydmVz
dGVycy5hZGRUaHJlYWRTYWZlKHdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIpOwotfQotCi1pbmxpbmUg
dm9pZCBTbG90VmlzaXRvcjo6YWRkVW5jb25kaXRpb25hbEZpbmFsaXplcihVbmNvbmRpdGlvbmFs
RmluYWxpemVyKiB1bmNvbmRpdGlvbmFsRmluYWxpemVyKQotewotICAgIG1fc2hhcmVkLm1fdW5j
b25kaXRpb25hbEZpbmFsaXplcnMuYWRkVGhyZWFkU2FmZSh1bmNvbmRpdGlvbmFsRmluYWxpemVy
KTsKLX0KLQotaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OmFkZE9wYXF1ZVJvb3Qodm9pZCogcm9v
dCkKLXsKLSNpZiBFTkFCTEUoUEFSQUxMRUxfR0MpCi0gICAgaWYgKE9wdGlvbnM6Om51bWJlck9m
R0NNYXJrZXJzKCkgPT0gMSkgewotICAgICAgICAvLyBQdXQgZGlyZWN0bHkgaW50byB0aGUgc2hh
cmVkIEhhc2hTZXQuCi0gICAgICAgIG1fc2hhcmVkLm1fb3BhcXVlUm9vdHMuYWRkKHJvb3QpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIC8vIFB1dCBpbnRvIHRoZSBsb2NhbCBzZXQsIGJ1
dCBtZXJnZSB3aXRoIHRoZSBzaGFyZWQgb25lIGV2ZXJ5IG9uY2UgaW4KLSAgICAvLyBhIHdoaWxl
IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBsb2NhbCBzZXRzIGRvbid0IGdyb3cgdG9vIGxhcmdlLgot
ICAgIG1lcmdlT3BhcXVlUm9vdHNJZlByb2ZpdGFibGUoKTsKLSAgICBtX29wYXF1ZVJvb3RzLmFk
ZChyb290KTsKLSNlbHNlCi0gICAgbV9vcGFxdWVSb290cy5hZGQocm9vdCk7Ci0jZW5kaWYKLX0K
LQotaW5saW5lIGJvb2wgU2xvdFZpc2l0b3I6OmNvbnRhaW5zT3BhcXVlUm9vdCh2b2lkKiByb290
KQotewotICAgIEFTU0VSVCghbV9pc0luUGFyYWxsZWxNb2RlKTsKLSNpZiBFTkFCTEUoUEFSQUxM
RUxfR0MpCi0gICAgQVNTRVJUKG1fb3BhcXVlUm9vdHMuaXNFbXB0eSgpKTsKLSAgICByZXR1cm4g
bV9zaGFyZWQubV9vcGFxdWVSb290cy5jb250YWlucyhyb290KTsKLSNlbHNlCi0gICAgcmV0dXJu
IG1fb3BhcXVlUm9vdHMuY29udGFpbnMocm9vdCk7Ci0jZW5kaWYKLX0KLQotaW5saW5lIGludCBT
bG90VmlzaXRvcjo6b3BhcXVlUm9vdENvdW50KCkKLXsKLSAgICBBU1NFUlQoIW1faXNJblBhcmFs
bGVsTW9kZSk7Ci0jaWYgRU5BQkxFKFBBUkFMTEVMX0dDKQotICAgIEFTU0VSVChtX29wYXF1ZVJv
b3RzLmlzRW1wdHkoKSk7Ci0gICAgcmV0dXJuIG1fc2hhcmVkLm1fb3BhcXVlUm9vdHMuc2l6ZSgp
OwotI2Vsc2UKLSAgICByZXR1cm4gbV9vcGFxdWVSb290cy5zaXplKCk7Ci0jZW5kaWYKLX0KLQot
aW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6Om1lcmdlT3BhcXVlUm9vdHNJZk5lY2Vzc2FyeSgpCi17
Ci0gICAgaWYgKG1fb3BhcXVlUm9vdHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0gICAg
bWVyZ2VPcGFxdWVSb290cygpOwotfQotICAgIAotaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6Om1l
cmdlT3BhcXVlUm9vdHNJZlByb2ZpdGFibGUoKQotewotICAgIGlmIChzdGF0aWNfY2FzdDx1bnNp
Z25lZD4obV9vcGFxdWVSb290cy5zaXplKCkpIDwgT3B0aW9uczo6b3BhcXVlUm9vdE1lcmdlVGhy
ZXNob2xkKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtZXJnZU9wYXF1ZVJvb3RzKCk7Ci19Ci0g
ICAgCi1pbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6ZG9uYXRlKCkKLXsKLSAgICBBU1NFUlQobV9p
c0luUGFyYWxsZWxNb2RlKTsKLSAgICBpZiAoT3B0aW9uczo6bnVtYmVyT2ZHQ01hcmtlcnMoKSA9
PSAxKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgZG9uYXRlS25vd25QYXJhbGxlbCgpOwot
fQotCi1pbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6ZG9uYXRlQW5kRHJhaW4oKQotewotICAgIGRv
bmF0ZSgpOwotICAgIGRyYWluKCk7Ci19Ci0KLWlubGluZSB2b2lkIFNsb3RWaXNpdG9yOjpjb3B5
TGF0ZXIodm9pZCogcHRyLCBzaXplX3QgYnl0ZXMpCi17Ci0gICAgaWYgKENvcGllZFNwYWNlOjpp
c092ZXJzaXplKGJ5dGVzKSkgewotICAgICAgICBtX3NoYXJlZC5tX2NvcGllZFNwYWNlLT5waW4o
Q29waWVkU3BhY2U6Om92ZXJzaXplQmxvY2tGb3IocHRyKSk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBDb3BpZWRCbG9jayogYmxvY2sgPSBDb3BpZWRTcGFjZTo6YmxvY2tGb3IocHRy
KTsKLSAgICBpZiAoYmxvY2stPmlzUGlubmVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGJs
b2NrLT5yZXBvcnRMaXZlQnl0ZXMoYnl0ZXMpOwotCi0gICAgaWYgKCFibG9jay0+c2hvdWxkRXZh
Y3VhdGUoKSkKLSAgICAgICAgbV9zaGFyZWQubV9jb3BpZWRTcGFjZS0+cGluKGJsb2NrKTsKLX0K
LSAgICAKLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gU2xvdFZpc2l0b3JJbmxpbmVN
ZXRob2RzX2gKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJ
bmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZp
c2l0b3JJbmxpbmVzLmgJKHJldmlzaW9uIDEzMzM4OSkJKGZyb20gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVNZXRob2RzLmg6MTMzMzg5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNsb3RWaXNpdG9ySW5saW5lTWV0
aG9kc19oCisjZGVmaW5lIFNsb3RWaXNpdG9ySW5saW5lTWV0aG9kc19oCisKKyNpbmNsdWRlICJD
b3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJPcHRpb25zLmgiCisjaW5jbHVk
ZSAiU2xvdFZpc2l0b3IuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK0FMV0FZU19JTkxJTkUgdm9p
ZCBTbG90VmlzaXRvcjo6YXBwZW5kKEpTVmFsdWUqIHNsb3QsIHNpemVfdCBjb3VudCkKK3sKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgSlNWYWx1ZSYg
dmFsdWUgPSBzbG90W2ldOworICAgICAgICBpbnRlcm5hbEFwcGVuZCh2YWx1ZSk7CisgICAgfQor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgoraW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVu
ZFVuYmFycmllcmVkUG9pbnRlcihUKiogc2xvdCkKK3sKKyAgICBBU1NFUlQoc2xvdCk7CisgICAg
SlNDZWxsKiBjZWxsID0gKnNsb3Q7CisgICAgaW50ZXJuYWxBcHBlbmQoY2VsbCk7Cit9CisKK0FM
V0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kKEpTVmFsdWUqIHNsb3QpCit7Cisg
ICAgQVNTRVJUKHNsb3QpOworICAgIGludGVybmFsQXBwZW5kKCpzbG90KTsKK30KKworQUxXQVlT
X0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRVbmJhcnJpZXJlZFZhbHVlKEpTVmFsdWUq
IHNsb3QpCit7CisgICAgQVNTRVJUKHNsb3QpOworICAgIGludGVybmFsQXBwZW5kKCpzbG90KTsK
K30KKworQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmQoSlNDZWxsKiogc2xv
dCkKK3sKKyAgICBBU1NFUlQoc2xvdCk7CisgICAgaW50ZXJuYWxBcHBlbmQoKnNsb3QpOworfQor
CitBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmludGVybmFsQXBwZW5kKEpTVmFsdWUg
dmFsdWUpCit7CisgICAgaWYgKCF2YWx1ZSB8fCAhdmFsdWUuaXNDZWxsKCkpCisgICAgICAgIHJl
dHVybjsKKyAgICBpbnRlcm5hbEFwcGVuZCh2YWx1ZS5hc0NlbGwoKSk7Cit9CisKK2lubGluZSB2
b2lkIFNsb3RWaXNpdG9yOjphZGRXZWFrUmVmZXJlbmNlSGFydmVzdGVyKFdlYWtSZWZlcmVuY2VI
YXJ2ZXN0ZXIqIHdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIpCit7CisgICAgbV9zaGFyZWQubV93ZWFr
UmVmZXJlbmNlSGFydmVzdGVycy5hZGRUaHJlYWRTYWZlKHdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIp
OworfQorCitpbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6YWRkVW5jb25kaXRpb25hbEZpbmFsaXpl
cihVbmNvbmRpdGlvbmFsRmluYWxpemVyKiB1bmNvbmRpdGlvbmFsRmluYWxpemVyKQoreworICAg
IG1fc2hhcmVkLm1fdW5jb25kaXRpb25hbEZpbmFsaXplcnMuYWRkVGhyZWFkU2FmZSh1bmNvbmRp
dGlvbmFsRmluYWxpemVyKTsKK30KKworaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OmFkZE9wYXF1
ZVJvb3Qodm9pZCogcm9vdCkKK3sKKyNpZiBFTkFCTEUoUEFSQUxMRUxfR0MpCisgICAgaWYgKE9w
dGlvbnM6Om51bWJlck9mR0NNYXJrZXJzKCkgPT0gMSkgeworICAgICAgICAvLyBQdXQgZGlyZWN0
bHkgaW50byB0aGUgc2hhcmVkIEhhc2hTZXQuCisgICAgICAgIG1fc2hhcmVkLm1fb3BhcXVlUm9v
dHMuYWRkKHJvb3QpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIC8vIFB1dCBpbnRvIHRo
ZSBsb2NhbCBzZXQsIGJ1dCBtZXJnZSB3aXRoIHRoZSBzaGFyZWQgb25lIGV2ZXJ5IG9uY2UgaW4K
KyAgICAvLyBhIHdoaWxlIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBsb2NhbCBzZXRzIGRvbid0IGdy
b3cgdG9vIGxhcmdlLgorICAgIG1lcmdlT3BhcXVlUm9vdHNJZlByb2ZpdGFibGUoKTsKKyAgICBt
X29wYXF1ZVJvb3RzLmFkZChyb290KTsKKyNlbHNlCisgICAgbV9vcGFxdWVSb290cy5hZGQocm9v
dCk7CisjZW5kaWYKK30KKworaW5saW5lIGJvb2wgU2xvdFZpc2l0b3I6OmNvbnRhaW5zT3BhcXVl
Um9vdCh2b2lkKiByb290KQoreworICAgIEFTU0VSVCghbV9pc0luUGFyYWxsZWxNb2RlKTsKKyNp
ZiBFTkFCTEUoUEFSQUxMRUxfR0MpCisgICAgQVNTRVJUKG1fb3BhcXVlUm9vdHMuaXNFbXB0eSgp
KTsKKyAgICByZXR1cm4gbV9zaGFyZWQubV9vcGFxdWVSb290cy5jb250YWlucyhyb290KTsKKyNl
bHNlCisgICAgcmV0dXJuIG1fb3BhcXVlUm9vdHMuY29udGFpbnMocm9vdCk7CisjZW5kaWYKK30K
KworaW5saW5lIGludCBTbG90VmlzaXRvcjo6b3BhcXVlUm9vdENvdW50KCkKK3sKKyAgICBBU1NF
UlQoIW1faXNJblBhcmFsbGVsTW9kZSk7CisjaWYgRU5BQkxFKFBBUkFMTEVMX0dDKQorICAgIEFT
U0VSVChtX29wYXF1ZVJvb3RzLmlzRW1wdHkoKSk7CisgICAgcmV0dXJuIG1fc2hhcmVkLm1fb3Bh
cXVlUm9vdHMuc2l6ZSgpOworI2Vsc2UKKyAgICByZXR1cm4gbV9vcGFxdWVSb290cy5zaXplKCk7
CisjZW5kaWYKK30KKworaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6Om1lcmdlT3BhcXVlUm9vdHNJ
Zk5lY2Vzc2FyeSgpCit7CisgICAgaWYgKG1fb3BhcXVlUm9vdHMuaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm47CisgICAgbWVyZ2VPcGFxdWVSb290cygpOworfQorICAgIAoraW5saW5lIHZvaWQg
U2xvdFZpc2l0b3I6Om1lcmdlT3BhcXVlUm9vdHNJZlByb2ZpdGFibGUoKQoreworICAgIGlmIChz
dGF0aWNfY2FzdDx1bnNpZ25lZD4obV9vcGFxdWVSb290cy5zaXplKCkpIDwgT3B0aW9uczo6b3Bh
cXVlUm9vdE1lcmdlVGhyZXNob2xkKCkpCisgICAgICAgIHJldHVybjsKKyAgICBtZXJnZU9wYXF1
ZVJvb3RzKCk7Cit9CisgICAgCitpbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6ZG9uYXRlKCkKK3sK
KyAgICBBU1NFUlQobV9pc0luUGFyYWxsZWxNb2RlKTsKKyAgICBpZiAoT3B0aW9uczo6bnVtYmVy
T2ZHQ01hcmtlcnMoKSA9PSAxKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgZG9uYXRlS25v
d25QYXJhbGxlbCgpOworfQorCitpbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6ZG9uYXRlQW5kRHJh
aW4oKQoreworICAgIGRvbmF0ZSgpOworICAgIGRyYWluKCk7Cit9CisKK2lubGluZSB2b2lkIFNs
b3RWaXNpdG9yOjpjb3B5TGF0ZXIodm9pZCogcHRyLCBzaXplX3QgYnl0ZXMpCit7CisgICAgaWYg
KENvcGllZFNwYWNlOjppc092ZXJzaXplKGJ5dGVzKSkgeworICAgICAgICBtX3NoYXJlZC5tX2Nv
cGllZFNwYWNlLT5waW4oQ29waWVkU3BhY2U6Om92ZXJzaXplQmxvY2tGb3IocHRyKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBDb3BpZWRCbG9jayogYmxvY2sgPSBDb3BpZWRTcGFj
ZTo6YmxvY2tGb3IocHRyKTsKKyAgICBpZiAoYmxvY2stPmlzUGlubmVkKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIGJsb2NrLT5yZXBvcnRMaXZlQnl0ZXMoYnl0ZXMpOworCisgICAgaWYgKCFi
bG9jay0+c2hvdWxkRXZhY3VhdGUoKSkKKyAgICAgICAgbV9zaGFyZWQubV9jb3BpZWRTcGFjZS0+
cGluKGJsb2NrKTsKK30KKyAgICAKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gU2xv
dFZpc2l0b3JJbmxpbmVNZXRob2RzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgJKHJldmlzaW9uIDEzMzM4OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yMywxMCArMjMsMTAgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
ICAqLwogCi0jaWZuZGVmIFNsb3RWaXNpdG9ySW5saW5lTWV0aG9kc19oCi0jZGVmaW5lIFNsb3RW
aXNpdG9ySW5saW5lTWV0aG9kc19oCisjaWZuZGVmIFNsb3RWaXNpdG9ySW5saW5lc19oCisjZGVm
aW5lIFNsb3RWaXNpdG9ySW5saW5lc19oCiAKLSNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZU1l
dGhvZHMuaCIKKyNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZXMuaCIKICNpbmNsdWRlICJPcHRp
b25zLmgiCiAjaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKIApAQCAtMTcwLDUgKzE3MCw1IEBAIGlu
bGluZSB2b2lkIFNsb3RWaXNpdG9yOjpjb3B5TGF0ZXIodm9pZCoKICAgICAKIH0gLy8gbmFtZXNw
YWNlIEpTQwogCi0jZW5kaWYgLy8gU2xvdFZpc2l0b3JJbmxpbmVNZXRob2RzX2gKKyNlbmRpZiAv
LyBTbG90VmlzaXRvcklubGluZXNfaAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0hvc3RDYWxsUmV0dXJuVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSG9zdENhbGxSZXR1cm5WYWx1ZS5jcHAJKHJldmlzaW9uIDEzMzk3MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSG9zdENhbGxSZXR1cm5WYWx1ZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRl
IDx3dGYvSW5saW5lQVNNLmg+CiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKLSNpbmNsdWRlICJKU1Zh
bHVlSW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkpTVmFsdWVJbmxpbmVzLmgiCiAKIAogbmFt
ZXNwYWNlIEpTQyB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiAx
MzM5NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM4LDcgKzM4LDcgQEAgSlNDOjpNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6U1NFMkNo
ZWNrUwogI2luY2x1ZGUgPHd0Zi9DcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlci5oPgogI2lu
Y2x1ZGUgIkRGR05vZGUuaCIgLy8gZm9yIERGR19TVUNDRVNTX1NUQVRTCiAjaW5jbHVkZSAiSW50
ZXJwcmV0ZXIuaCIKLSNpbmNsdWRlICJKSVRJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiSklU
SW5saW5lcy5oIgogI2luY2x1ZGUgIkpJVFN0dWJDYWxsLmgiCiAjaW5jbHVkZSAiSlNBcnJheS5o
IgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUQXJpdGhtZXRpYzMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVEFyaXRobWV0aWMzMl82NC5jcHAJKHJldmlzaW9uIDEzMzk3MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYzMyXzY0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzAsNyArMzAsNyBAQAogI2luY2x1ZGUgIkpJVC5oIgogCiAjaW5jbHVkZSAiQ29k
ZUJsb2NrLmgiCi0jaW5jbHVkZSAiSklUSW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkpJVElu
bGluZXMuaCIKICNpbmNsdWRlICJKSVRTdHViQ2FsbC5oIgogI2luY2x1ZGUgIkpJVFN0dWJzLmgi
CiAjaW5jbHVkZSAiSlNBcnJheS5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRBcml0aG1ldGljLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVEFyaXRobWV0aWMuY3BwCShyZXZpc2lvbiAxMzM5NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3
IEBACiAjaW5jbHVkZSAiSklULmgiCiAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKLSNpbmNsdWRl
ICJKSVRJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiSklUSW5saW5lcy5oIgogI2luY2x1ZGUg
IkpJVFN0dWJDYWxsLmgiCiAjaW5jbHVkZSAiSklUU3R1YnMuaCIKICNpbmNsdWRlICJKU0FycmF5
LmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCShy
ZXZpc2lvbiAxMzM5NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82
NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlICJBcmd1bWVu
dHMuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgot
I2luY2x1ZGUgIkpJVElubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiSklUU3R1YkNhbGwuaCIKICNpbmNsdWRlICJKU0FycmF5LmgiCiAjaW5jbHVkZSAi
SlNGdW5jdGlvbi5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCShy
ZXZpc2lvbiAxMzM5NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAKICNpbmNsdWRlICJBcmd1bWVudHMu
aCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKLSNpbmNsdWRlICJKSVRJbmxpbmVNZXRob2RzLmgi
CisjaW5jbHVkZSAiSklUSW5saW5lcy5oIgogI2luY2x1ZGUgIkpJVFN0dWJDYWxsLmgiCiAjaW5j
bHVkZSAiSlNBcnJheS5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAxMzM5NzMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZU1ldGhvZHMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSwxMDA3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIw
MTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBKSVRJbmxpbmVNZXRob2RzX2gKLSNkZWZp
bmUgSklUSW5saW5lTWV0aG9kc19oCi0KLQotI2lmIEVOQUJMRShKSVQpCi0KLW5hbWVzcGFjZSBK
U0MgewotCi1BTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudEltbWVkaWF0
ZURvdWJsZSh1bnNpZ25lZCBzcmMpCi17Ci0gICAgcmV0dXJuIG1fY29kZUJsb2NrLT5pc0NvbnN0
YW50UmVnaXN0ZXJJbmRleChzcmMpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzRG91Ymxl
KCk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgSlNWYWx1ZSBKSVQ6OmdldENvbnN0YW50T3BlcmFuZCh1
bnNpZ25lZCBzcmMpCi17Ci0gICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0
ZXJJbmRleChzcmMpKTsKLSAgICByZXR1cm4gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7
Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRDZWxsVG9DYWxsRnJhbWVIZWFk
ZXIoUmVnaXN0ZXJJRCBmcm9tLCBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJFbnRyeSBlbnRyeSkK
LXsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OkNlbGxUYWcpLCB0YWdGb3IoZW50cnksIGNhbGxGcmFtZVJlZ2lzdGVyKSk7Ci0gICAgc3Rv
cmUzMihmcm9tLCBwYXlsb2FkRm9yKGVudHJ5LCBjYWxsRnJhbWVSZWdpc3RlcikpOwotI2Vsc2UK
LSAgICBzdG9yZTY0KGZyb20sIGFkZHJlc3NGb3IoZW50cnksIGNhbGxGcmFtZVJlZ2lzdGVyKSk7
Ci0jZW5kaWYKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dEludFRvQ2FsbEZy
YW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyRW50cnkg
ZW50cnkpCi17Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICBzdG9yZTMyKFRydXN0ZWRJbW0z
MihJbnQzMlRhZyksIGludFRhZ0ZvcihlbnRyeSwgY2FsbEZyYW1lUmVnaXN0ZXIpKTsKLSAgICBz
dG9yZTMyKGZyb20sIGludFBheWxvYWRGb3IoZW50cnksIGNhbGxGcmFtZVJlZ2lzdGVyKSk7Ci0j
ZWxzZQotICAgIHN0b3JlNjQoZnJvbSwgYWRkcmVzc0ZvcihlbnRyeSwgY2FsbEZyYW1lUmVnaXN0
ZXIpKTsKLSNlbmRpZgotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0VG9DYWxs
RnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJFbnRy
eSBlbnRyeSkKLXsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIHN0b3JlUHRyKGZyb20sIHBh
eWxvYWRGb3IoZW50cnksIGNhbGxGcmFtZVJlZ2lzdGVyKSk7Ci0jZWxzZQotICAgIHN0b3JlNjQo
ZnJvbSwgYWRkcmVzc0ZvcihlbnRyeSwgY2FsbEZyYW1lUmVnaXN0ZXIpKTsKLSNlbmRpZgotfQot
Ci1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0SW1tZWRpYXRlVG9DYWxsRnJhbWVIZWFk
ZXIodm9pZCogdmFsdWUsIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlckVudHJ5IGVudHJ5KQotewot
ICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIodmFsdWUpLCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lz
dGVyLCBlbnRyeSAqIHNpemVvZihSZWdpc3RlcikpKTsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6ZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoSlNTdGFjazo6Q2FsbEZyYW1lSGVh
ZGVyRW50cnkgZW50cnksIFJlZ2lzdGVySUQgdG8sIFJlZ2lzdGVySUQgZnJvbSkKLXsKLSAgICBs
b2FkUHRyKEFkZHJlc3MoZnJvbSwgZW50cnkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgdG8pOwotI2lm
IFVTRShKU1ZBTFVFNjQpCi0gICAga2lsbExhc3RSZXN1bHRSZWdpc3RlcigpOwotI2VuZGlmCi19
Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyMzIo
SlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyRW50cnkgZW50cnksIFJlZ2lzdGVySUQgdG8sIFJlZ2lz
dGVySUQgZnJvbSkKLXsKLSAgICBsb2FkMzIoQWRkcmVzcyhmcm9tLCBlbnRyeSAqIHNpemVvZihS
ZWdpc3RlcikpLCB0byk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBraWxsTGFzdFJlc3VsdFJl
Z2lzdGVyKCk7Ci0jZW5kaWYKLX0KLQotI2lmIFVTRShKU1ZBTFVFNjQpCi1BTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjplbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlcjY0KEpTU3RhY2s6OkNhbGxGcmFt
ZUhlYWRlckVudHJ5IGVudHJ5LCBSZWdpc3RlcklEIHRvLCBSZWdpc3RlcklEIGZyb20pCi17Ci0g
ICAgbG9hZDY0KEFkZHJlc3MoZnJvbSwgZW50cnkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgdG8pOwot
ICAgIGtpbGxMYXN0UmVzdWx0UmVnaXN0ZXIoKTsKLX0KLSNlbmRpZgotCi1BTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjplbWl0TG9hZENoYXJhY3RlclN0cmluZyhSZWdpc3RlcklEIHNyYywgUmVnaXN0
ZXJJRCBkc3QsIEp1bXBMaXN0JiBmYWlsdXJlcykKLXsKLSAgICBmYWlsdXJlcy5hcHBlbmQoYnJh
bmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHNyYywgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSks
IFRydXN0ZWRJbW1QdHIobV9nbG9iYWxEYXRhLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7Ci0g
ICAgZmFpbHVyZXMuYXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhzcmMsIFRodW5rSGVscGVyczo6anNTdHJpbmdMZW5ndGhPZmZzZXQoKSksIFRydXN0ZWRJ
bW0zMigxKSkpOwotICAgIGxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3JjLCBUaHVu
a0hlbHBlcnM6OmpzU3RyaW5nVmFsdWVPZmZzZXQoKSksIGRzdCk7Ci0gICAgZmFpbHVyZXMuYXBw
ZW5kKGJyYW5jaFRlc3QzMihaZXJvLCBkc3QpKTsKLSAgICBsb2FkUHRyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGRzdCwgVGh1bmtIZWxwZXJzOjpzdHJpbmdJbXBsRmxhZ3NPZmZzZXQoKSksIHJl
Z1QxKTsKLSAgICBsb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGRzdCwgVGh1bmtIZWxw
ZXJzOjpzdHJpbmdJbXBsRGF0YU9mZnNldCgpKSwgZHN0KTsKLQotICAgIEp1bXBMaXN0IGlzMTZC
aXQ7Ci0gICAgSnVtcExpc3QgY29udDhCaXQ7Ci0gICAgaXMxNkJpdC5hcHBlbmQoYnJhbmNoVGVz
dDMyKFplcm8sIHJlZ1QxLCBUcnVzdGVkSW1tMzIoVGh1bmtIZWxwZXJzOjpzdHJpbmdJbXBsOEJp
dEZsYWcoKSkpKTsKLSAgICBsb2FkOChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhkc3QsIDApLCBk
c3QpOwotICAgIGNvbnQ4Qml0LmFwcGVuZChqdW1wKCkpOwotICAgIGlzMTZCaXQubGluayh0aGlz
KTsKLSAgICBsb2FkMTYoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZHN0LCAwKSwgZHN0KTsKLSAg
ICBjb250OEJpdC5saW5rKHRoaXMpOwotfQotCi1BTFdBWVNfSU5MSU5FIEpJVDo6Q2FsbCBKSVQ6
OmVtaXROYWtlZENhbGwoQ29kZVB0ciBmdW5jdGlvbikKLXsKLSAgICBBU1NFUlQobV9ieXRlY29k
ZU9mZnNldCAhPSAodW5zaWduZWQpLTEpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBj
YWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2Rl
T2Zmc2V0IGlzIHNldC4KLQotICAgIENhbGwgbmFrZWRDYWxsID0gbmVhckNhbGwoKTsKLSAgICBt
X2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKG5ha2VkQ2FsbCwgbV9ieXRlY29kZU9mZnNldCwgZnVu
Y3Rpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwotICAgIHJldHVybiBuYWtlZENhbGw7Ci19Ci0K
LUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmF0SnVtcFRhcmdldCgpCi17Ci0gICAgd2hpbGUgKG1f
anVtcFRhcmdldHNQb3NpdGlvbiA8IG1fY29kZUJsb2NrLT5udW1iZXJPZkp1bXBUYXJnZXRzKCkg
JiYgbV9jb2RlQmxvY2stPmp1bXBUYXJnZXQobV9qdW1wVGFyZ2V0c1Bvc2l0aW9uKSA8PSBtX2J5
dGVjb2RlT2Zmc2V0KSB7Ci0gICAgICAgIGlmIChtX2NvZGVCbG9jay0+anVtcFRhcmdldChtX2p1
bXBUYXJnZXRzUG9zaXRpb24pID09IG1fYnl0ZWNvZGVPZmZzZXQpCi0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgKyttX2p1bXBUYXJnZXRzUG9zaXRpb247Ci0gICAgfQotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQotI2lmIGRlZmluZWQoQVNTRU1CTEVSX0hBU19DT05TVEFOVF9QT09M
KSAmJiBBU1NFTUJMRVJfSEFTX0NPTlNUQU5UX1BPT0wKLQotQUxXQVlTX0lOTElORSB2b2lkIEpJ
VDo6YmVnaW5VbmludGVycnVwdGVkU2VxdWVuY2UoaW50IGluc25TcGFjZSwgaW50IGNvbnN0U3Bh
Y2UpCi17Ci0jaWYgQ1BVKEFSTV9UUkFESVRJT05BTCkKLSNpZm5kZWYgTkRFQlVHCi0gICAgLy8g
RW5zdXJlIHRoZSBsYWJlbCBhZnRlciB0aGUgc2VxdWVuY2UgY2FuIGFsc28gZml0Ci0gICAgaW5z
blNwYWNlICs9IHNpemVvZihBUk1Xb3JkKTsKLSAgICBjb25zdFNwYWNlICs9IHNpemVvZih1aW50
NjRfdCk7Ci0jZW5kaWYKLQotICAgIGVuc3VyZVNwYWNlKGluc25TcGFjZSwgY29uc3RTcGFjZSk7
Ci0KLSNlbGlmIENQVShTSDQpCi0jaWZuZGVmIE5ERUJVRwotICAgIGluc25TcGFjZSArPSBzaXpl
b2YoU0g0V29yZCk7Ci0gICAgY29uc3RTcGFjZSArPSBzaXplb2YodWludDY0X3QpOwotI2VuZGlm
Ci0KLSAgICBtX2Fzc2VtYmxlci5lbnN1cmVTcGFjZShpbnNuU3BhY2UgKyBtX2Fzc2VtYmxlci5t
YXhJbnN0cnVjdGlvblNpemUgKyAyLCBjb25zdFNwYWNlICsgOCk7Ci0jZW5kaWYKLQotI2lmIGRl
ZmluZWQoQVNTRU1CTEVSX0hBU19DT05TVEFOVF9QT09MKSAmJiBBU1NFTUJMRVJfSEFTX0NPTlNU
QU5UX1BPT0wKLSNpZm5kZWYgTkRFQlVHCi0gICAgbV91bmludGVycnVwdGVkSW5zdHJ1Y3Rpb25T
ZXF1ZW5jZUJlZ2luID0gbGFiZWwoKTsKLSAgICBtX3VuaW50ZXJydXB0ZWRDb25zdGFudFNlcXVl
bmNlQmVnaW4gPSBzaXplT2ZDb25zdGFudFBvb2woKTsKLSNlbmRpZgotI2VuZGlmCi19Ci0KLUFM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVuZFVuaW50ZXJydXB0ZWRTZXF1ZW5jZShpbnQgaW5zblNw
YWNlLCBpbnQgY29uc3RTcGFjZSwgaW50IGRzdCkKLXsKLSAgICBVTlVTRURfUEFSQU0oZHN0KTsK
LSNpZiBkZWZpbmVkKEFTU0VNQkxFUl9IQVNfQ09OU1RBTlRfUE9PTCkgJiYgQVNTRU1CTEVSX0hB
U19DT05TVEFOVF9QT09MCi0gICAgLyogVGhlcmUgYXJlIHNldmVyYWwgY2FzZXMgd2hlbiB0aGUg
dW5pbnRlcnJ1cHRlZCBzZXF1ZW5jZSBpcyBsYXJnZXIgdGhhbgotICAgICAqIG1heGltdW0gcmVx
dWlyZWQgb2Zmc2V0IGZvciBwYXRoaW5nIHRoZSBzYW1lIHNlcXVlbmNlLiBFZy46IGlmIGluIGEK
LSAgICAgKiB1bmludGVycnVwdGVkIHNlcXVlbmNlIHRoZSBsYXN0IG1hY3JvYXNzZW1ibGVyJ3Mg
aW5zdHJ1Y3Rpb24gaXMgYSBzdHViCi0gICAgICogY2FsbCwgaXQgZW1pdHMgc3RvcmUgaW5zdHJ1
Y3Rpb24ocykgd2hpY2ggc2hvdWxkIG5vdCBiZSBpbmNsdWRlZCBpbiB0aGUKLSAgICAgKiBjYWxj
dWxhdGlvbiBvZiBsZW5ndGggb2YgdW5pbnRlcnJ1cHRlZCBzZXF1ZW5jZS4gU28sIHRoZSBpbnNu
U3BhY2UgYW5kCi0gICAgICogY29uc3RTcGFjZSBzaG91bGQgYmUgdXBwZXIgbGltaXQgaW5zdGVh
ZCBvZiBoYXJkIGxpbWl0LgotICAgICAqLwotI2lmIENQVShTSDQpCi0gICAgaWYgKChkc3QgPiAx
NSkgfHwgKGRzdCA8IC0xNikpIHsKLSAgICAgICAgaW5zblNwYWNlICs9IDg7Ci0gICAgICAgIGNv
bnN0U3BhY2UgKz0gMjsKLSAgICB9Ci0KLSAgICBpZiAoKChkc3QgPj0gLTE2KSAmJiAoZHN0IDwg
MCkpIHx8ICgoZHN0ID4gNykgJiYgKGRzdCA8PSAxNSkpKQotICAgICAgICBpbnNuU3BhY2UgKz0g
ODsKLSNlbmRpZgotICAgIEFTU0VSVChkaWZmZXJlbmNlQmV0d2VlbihtX3VuaW50ZXJydXB0ZWRJ
bnN0cnVjdGlvblNlcXVlbmNlQmVnaW4sIGxhYmVsKCkpIDw9IGluc25TcGFjZSk7Ci0gICAgQVNT
RVJUKHNpemVPZkNvbnN0YW50UG9vbCgpIC0gbV91bmludGVycnVwdGVkQ29uc3RhbnRTZXF1ZW5j
ZUJlZ2luIDw9IGNvbnN0U3BhY2UpOwotI2VuZGlmCi19Ci0KLSNlbmRpZgotCi0jaWYgQ1BVKEFS
TSkKLQotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6cHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJD
YWxsKFJlZ2lzdGVySUQgcmVnKQotewotICAgIG1vdmUobGlua1JlZ2lzdGVyLCByZWcpOwotfQot
Ci1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpyZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVy
bihSZWdpc3RlcklEIHJlZykKLXsKLSAgICBtb3ZlKHJlZywgbGlua1JlZ2lzdGVyKTsKLX0KLQot
QUxXQVlTX0lOTElORSB2b2lkIEpJVDo6cmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4o
QWRkcmVzcyBhZGRyZXNzKQotewotICAgIGxvYWRQdHIoYWRkcmVzcywgbGlua1JlZ2lzdGVyKTsK
LX0KLSNlbGlmIENQVShTSDQpCi0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnByZXNlcnZlUmV0
dXJuQWRkcmVzc0FmdGVyQ2FsbChSZWdpc3RlcklEIHJlZykKLXsKLSAgICBtX2Fzc2VtYmxlci5z
dHNwcihyZWcpOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpyZXN0b3JlUmV0dXJuQWRk
cmVzc0JlZm9yZVJldHVybihSZWdpc3RlcklEIHJlZykKLXsKLSAgICBtX2Fzc2VtYmxlci5sZHNw
cihyZWcpOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpyZXN0b3JlUmV0dXJuQWRkcmVz
c0JlZm9yZVJldHVybihBZGRyZXNzIGFkZHJlc3MpCi17Ci0gICAgbG9hZFB0ckxpbmtSZWcoYWRk
cmVzcyk7Ci19Ci0KLSNlbGlmIENQVShNSVBTKQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpw
cmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwoUmVnaXN0ZXJJRCByZWcpCi17Ci0gICAgbW92
ZShyZXR1cm5BZGRyZXNzUmVnaXN0ZXIsIHJlZyk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6OnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKFJlZ2lzdGVySUQgcmVnKQotewot
ICAgIG1vdmUocmVnLCByZXR1cm5BZGRyZXNzUmVnaXN0ZXIpOwotfQotCi1BTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjpyZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihBZGRyZXNzIGFkZHJl
c3MpCi17Ci0gICAgbG9hZFB0cihhZGRyZXNzLCByZXR1cm5BZGRyZXNzUmVnaXN0ZXIpOwotfQot
Ci0jZWxzZSAvLyBDUFUoWDg2KSB8fCBDUFUoWDg2XzY0KQotCi1BTFdBWVNfSU5MSU5FIHZvaWQg
SklUOjpwcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwoUmVnaXN0ZXJJRCByZWcpCi17Ci0g
ICAgcG9wKHJlZyk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnJlc3RvcmVSZXR1cm5B
ZGRyZXNzQmVmb3JlUmV0dXJuKFJlZ2lzdGVySUQgcmVnKQotewotICAgIHB1c2gocmVnKTsKLX0K
LQotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6cmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1
cm4oQWRkcmVzcyBhZGRyZXNzKQotewotICAgIHB1c2goYWRkcmVzcyk7Ci19Ci0KLSNlbmRpZgot
Ci1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpyZXN0b3JlQXJndW1lbnRSZWZlcmVuY2UoKQotewot
ICAgIG1vdmUoc3RhY2tQb2ludGVyUmVnaXN0ZXIsIGZpcnN0QXJndW1lbnRSZWdpc3Rlcik7Ci0g
ICAgcG9rZShjYWxsRnJhbWVSZWdpc3RlciwgT0JKRUNUX09GRlNFVE9GKHN0cnVjdCBKSVRTdGFj
a0ZyYW1lLCBjYWxsRnJhbWUpIC8gc2l6ZW9mKHZvaWQqKSk7Ci19Ci0KLUFMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OnVwZGF0ZVRvcENhbGxGcmFtZSgpCi17Ci0gICAgQVNTRVJUKHN0YXRpY19jYXN0
PGludD4obV9ieXRlY29kZU9mZnNldCkgPj0gMCk7Ci0gICAgaWYgKG1fYnl0ZWNvZGVPZmZzZXQp
IHsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpICsgbV9ieXRlY29kZU9mZnNldCAr
IDEpLCBpbnRUYWdGb3IoSlNTdGFjazo6QXJndW1lbnRDb3VudCkpOwotI2Vsc2UKLSAgICAgICAg
c3RvcmUzMihUcnVzdGVkSW1tMzIobV9ieXRlY29kZU9mZnNldCArIDEpLCBpbnRUYWdGb3IoSlNT
dGFjazo6QXJndW1lbnRDb3VudCkpOwotI2VuZGlmCi0gICAgfQotICAgIHN0b3JlUHRyKGNhbGxG
cmFtZVJlZ2lzdGVyLCAmbV9nbG9iYWxEYXRhLT50b3BDYWxsRnJhbWUpOwotfQotCi1BTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjpyZXN0b3JlQXJndW1lbnRSZWZlcmVuY2VGb3JUcmFtcG9saW5lKCkK
LXsKLSNpZiBDUFUoWDg2KQotICAgIC8vIFdpdGhpbiBhIHRyYW1wb2xpbmUgdGhlIHJldHVybiBh
ZGRyZXNzIHdpbGwgYmUgb24gdGhlIHN0YWNrIGF0IHRoaXMgcG9pbnQuCi0gICAgYWRkUHRyKFRy
dXN0ZWRJbW0zMihzaXplb2Yodm9pZCopKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIsIGZpcnN0QXJn
dW1lbnRSZWdpc3Rlcik7Ci0jZWxpZiBDUFUoQVJNKQotICAgIG1vdmUoc3RhY2tQb2ludGVyUmVn
aXN0ZXIsIGZpcnN0QXJndW1lbnRSZWdpc3Rlcik7Ci0jZWxpZiBDUFUoU0g0KQotICAgIG1vdmUo
c3RhY2tQb2ludGVyUmVnaXN0ZXIsIGZpcnN0QXJndW1lbnRSZWdpc3Rlcik7Ci0jZW5kaWYKLSAg
ICAvLyBJbiB0aGUgdHJhbXBvbGluZSBvbiB4ODYtNjQsIHRoZSBmaXJzdCBhcmd1bWVudCByZWdp
c3RlciBpcyBub3Qgb3ZlcndyaXR0ZW4uCi19Ci0KLUFMV0FZU19JTkxJTkUgSklUOjpKdW1wIEpJ
VDo6Y2hlY2tTdHJ1Y3R1cmUoUmVnaXN0ZXJJRCByZWcsIFN0cnVjdHVyZSogc3RydWN0dXJlKQot
ewotICAgIHJldHVybiBicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVnLCBKU0NlbGw6OnN0
cnVjdHVyZU9mZnNldCgpKSwgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpKTsKLX0KLQotQUxXQVlT
X0lOTElORSB2b2lkIEpJVDo6bGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlciwgaW50IHZSZWcpCi17Ci0gICAgaWYgKCFtX2NvZGVCbG9j
ay0+aXNLbm93bk5vdEltbWVkaWF0ZSh2UmVnKSkKLSAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIp
OwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZShKdW1wIGp1bXApCi17
Ci0gICAgQVNTRVJUKG1fYnl0ZWNvZGVPZmZzZXQgIT0gKHVuc2lnbmVkKS0xKTsgLy8gVGhpcyBt
ZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRp
b24sIHNvIHRoYXQgbV9ieXRlY29kZU9mZnNldCBpcyBzZXQuCi0KLSAgICBtX3Nsb3dDYXNlcy5h
cHBlbmQoU2xvd0Nhc2VFbnRyeShqdW1wLCBtX2J5dGVjb2RlT2Zmc2V0KSk7Ci19Ci0KLUFMV0FZ
U19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNsb3dDYXNlKEp1bXBMaXN0IGp1bXBMaXN0KQotewotICAg
IEFTU0VSVChtX2J5dGVjb2RlT2Zmc2V0ICE9ICh1bnNpZ25lZCktMSk7IC8vIFRoaXMgbWV0aG9k
IHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBz
byB0aGF0IG1fYnl0ZWNvZGVPZmZzZXQgaXMgc2V0LgotCi0gICAgY29uc3QgSnVtcExpc3Q6Okp1
bXBWZWN0b3ImIGp1bXBWZWN0b3IgPSBqdW1wTGlzdC5qdW1wcygpOwotICAgIHNpemVfdCBzaXpl
ID0ganVtcFZlY3Rvci5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyAr
K2kpCi0gICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KGp1bXBWZWN0b3Jb
aV0sIG1fYnl0ZWNvZGVPZmZzZXQpKTsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRk
U2xvd0Nhc2UoKQotewotICAgIEFTU0VSVChtX2J5dGVjb2RlT2Zmc2V0ICE9ICh1bnNpZ25lZCkt
MSk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQg
cGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVPZmZzZXQgaXMgc2V0LgotICAgIAot
ICAgIEp1bXAgZW1wdHlKdW1wOyAvLyBEb2luZyBpdCB0aGlzIHdheSB0byBtYWtlIFdpbmRvd3Mg
aGFwcHkuCi0gICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoZW1wdHlKdW1wLCBt
X2J5dGVjb2RlT2Zmc2V0KSk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZEp1bXAo
SnVtcCBqdW1wLCBpbnQgcmVsYXRpdmVPZmZzZXQpCi17Ci0gICAgQVNTRVJUKG1fYnl0ZWNvZGVP
ZmZzZXQgIT0gKHVuc2lnbmVkKS0xKTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2Fs
bGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZU9m
ZnNldCBpcyBzZXQuCi0KLSAgICBtX2ptcFRhYmxlLmFwcGVuZChKdW1wVGFibGUoanVtcCwgbV9i
eXRlY29kZU9mZnNldCArIHJlbGF0aXZlT2Zmc2V0KSk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9p
ZCBKSVQ6OmVtaXRKdW1wU2xvd1RvSG90KEp1bXAganVtcCwgaW50IHJlbGF0aXZlT2Zmc2V0KQot
ewotICAgIEFTU0VSVChtX2J5dGVjb2RlT2Zmc2V0ICE9ICh1bnNpZ25lZCktMSk7IC8vIFRoaXMg
bWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0
aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVPZmZzZXQgaXMgc2V0LgotCi0gICAganVtcC5saW5rVG8o
bV9sYWJlbHNbbV9ieXRlY29kZU9mZnNldCArIHJlbGF0aXZlT2Zmc2V0XSwgdGhpcyk7Ci19Ci0K
LUFMV0FZU19JTkxJTkUgSklUOjpKdW1wIEpJVDo6ZW1pdEp1bXBJZk5vdE9iamVjdChSZWdpc3Rl
cklEIHN0cnVjdHVyZVJlZykKLXsKLSAgICByZXR1cm4gYnJhbmNoOChCZWxvdywgQWRkcmVzcyhz
dHJ1Y3R1cmVSZWcsIFN0cnVjdHVyZTo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1t
MzIoT2JqZWN0VHlwZSkpOwotfQotCi1BTFdBWVNfSU5MSU5FIEpJVDo6SnVtcCBKSVQ6OmVtaXRK
dW1wSWZOb3RUeXBlKFJlZ2lzdGVySUQgYmFzZVJlZywgUmVnaXN0ZXJJRCBzY3JhdGNoUmVnLCBK
U1R5cGUgdHlwZSkKLXsKLSAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZVJlZywgSlNDZWxsOjpzdHJ1
Y3R1cmVPZmZzZXQoKSksIHNjcmF0Y2hSZWcpOwotICAgIHJldHVybiBicmFuY2g4KE5vdEVxdWFs
LCBBZGRyZXNzKHNjcmF0Y2hSZWcsIFN0cnVjdHVyZTo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBU
cnVzdGVkSW1tMzIodHlwZSkpOwotfQotCi0jaWYgRU5BQkxFKFNBTVBMSU5HX0ZMQUdTKQotQUxX
QVlTX0lOTElORSB2b2lkIEpJVDo6c2V0U2FtcGxpbmdGbGFnKGludDMyX3QgZmxhZykKLXsKLSAg
ICBBU1NFUlQoZmxhZyA+PSAxKTsKLSAgICBBU1NFUlQoZmxhZyA8PSAzMik7Ci0gICAgb3IzMihU
cnVzdGVkSW1tMzIoMXUgPDwgKGZsYWcgLSAxKSksIEFic29sdXRlQWRkcmVzcyhTYW1wbGluZ0Zs
YWdzOjphZGRyZXNzT2ZGbGFncygpKSk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmNs
ZWFyU2FtcGxpbmdGbGFnKGludDMyX3QgZmxhZykKLXsKLSAgICBBU1NFUlQoZmxhZyA+PSAxKTsK
LSAgICBBU1NFUlQoZmxhZyA8PSAzMik7Ci0gICAgYW5kMzIoVHJ1c3RlZEltbTMyKH4oMXUgPDwg
KGZsYWcgLSAxKSkpLCBBYnNvbHV0ZUFkZHJlc3MoU2FtcGxpbmdGbGFnczo6YWRkcmVzc09mRmxh
Z3MoKSkpOwotfQotI2VuZGlmCi0KLSNpZiBFTkFCTEUoU0FNUExJTkdfQ09VTlRFUlMpCi1BTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjplbWl0Q291bnQoQWJzdHJhY3RTYW1wbGluZ0NvdW50ZXImIGNv
dW50ZXIsIGludDMyX3QgY291bnQpCi17Ci0gICAgYWRkNjQoVHJ1c3RlZEltbTMyKGNvdW50KSwg
QWJzb2x1dGVBZGRyZXNzKGNvdW50ZXIuYWRkcmVzc09mQ291bnRlcigpKSk7Ci19Ci0jZW5kaWYK
LQotI2lmIEVOQUJMRShPUENPREVfU0FNUExJTkcpCi0jaWYgQ1BVKFg4Nl82NCkKLUFMV0FZU19J
TkxJTkUgdm9pZCBKSVQ6OnNhbXBsZUluc3RydWN0aW9uKEluc3RydWN0aW9uKiBpbnN0cnVjdGlv
biwgYm9vbCBpbkhvc3RGdW5jdGlvbikKLXsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9pbnRl
cnByZXRlci0+c2FtcGxlcigpLT5zYW1wbGVTbG90KCkpLCBYODZSZWdpc3RlcnM6OmVjeCk7Ci0g
ICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihtX2ludGVycHJldGVyLT5zYW1wbGVyKCktPmVuY29k
ZVNhbXBsZShpbnN0cnVjdGlvbiwgaW5Ib3N0RnVuY3Rpb24pKSwgWDg2UmVnaXN0ZXJzOjplY3gp
OwotfQotI2Vsc2UKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnNhbXBsZUluc3RydWN0aW9uKElu
c3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgYm9vbCBpbkhvc3RGdW5jdGlvbikKLXsKLSAgICBzdG9y
ZVB0cihUcnVzdGVkSW1tUHRyKG1faW50ZXJwcmV0ZXItPnNhbXBsZXIoKS0+ZW5jb2RlU2FtcGxl
KGluc3RydWN0aW9uLCBpbkhvc3RGdW5jdGlvbikpLCBtX2ludGVycHJldGVyLT5zYW1wbGVyKCkt
PnNhbXBsZVNsb3QoKSk7Ci19Ci0jZW5kaWYKLSNlbmRpZgotCi0jaWYgRU5BQkxFKENPREVCTE9D
S19TQU1QTElORykKLSNpZiBDUFUoWDg2XzY0KQotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6c2Ft
cGxlQ29kZUJsb2NrKENvZGVCbG9jayogY29kZUJsb2NrKQotewotICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihtX2ludGVycHJldGVyLT5zYW1wbGVyKCktPmNvZGVCbG9ja1Nsb3QoKSksIFg4NlJlZ2lz
dGVyczo6ZWN4KTsKLSAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKGNvZGVCbG9jayksIFg4NlJl
Z2lzdGVyczo6ZWN4KTsKLX0KLSNlbHNlCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpzYW1wbGVD
b2RlQmxvY2soQ29kZUJsb2NrKiBjb2RlQmxvY2spCi17Ci0gICAgc3RvcmVQdHIoVHJ1c3RlZElt
bVB0cihjb2RlQmxvY2spLCBtX2ludGVycHJldGVyLT5zYW1wbGVyKCktPmNvZGVCbG9ja1Nsb3Qo
KSk7Ci19Ci0jZW5kaWYKLSNlbmRpZgotCi1BTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJh
bmRDb25zdGFudEltbWVkaWF0ZUNoYXIodW5zaWduZWQgc3JjKQotewotICAgIHJldHVybiBtX2Nv
ZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoc3JjKSAmJiBnZXRDb25zdGFudE9wZXJh
bmQoc3JjKS5pc1N0cmluZygpICYmIGFzU3RyaW5nKGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFz
Q2VsbCgpKS0+bGVuZ3RoKCkgPT0gMTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIENsYXNzVHlw
ZSwgTWFya2VkQmxvY2s6OkRlc3RydWN0b3JUeXBlIGRlc3RydWN0b3JUeXBlLCB0eXBlbmFtZSBT
dHJ1Y3R1cmVUeXBlPiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBbGxvY2F0ZUJhc2ljSlNPYmplY3Qo
U3RydWN0dXJlVHlwZSBzdHJ1Y3R1cmUsIFJlZ2lzdGVySUQgcmVzdWx0LCBSZWdpc3RlcklEIHN0
b3JhZ2VQdHIpCi17Ci0gICAgc2l6ZV90IHNpemUgPSBDbGFzc1R5cGU6OmFsbG9jYXRpb25TaXpl
KElOTElORV9TVE9SQUdFX0NBUEFDSVRZKTsKLSAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRv
ciA9IDA7Ci0gICAgaWYgKGRlc3RydWN0b3JUeXBlID09IE1hcmtlZEJsb2NrOjpOb3JtYWwpCi0g
ICAgICAgIGFsbG9jYXRvciA9ICZtX2dsb2JhbERhdGEtPmhlYXAuYWxsb2NhdG9yRm9yT2JqZWN0
V2l0aE5vcm1hbERlc3RydWN0b3Ioc2l6ZSk7Ci0gICAgZWxzZSBpZiAoZGVzdHJ1Y3RvclR5cGUg
PT0gTWFya2VkQmxvY2s6OkltbW9ydGFsU3RydWN0dXJlKQotICAgICAgICBhbGxvY2F0b3IgPSAm
bV9nbG9iYWxEYXRhLT5oZWFwLmFsbG9jYXRvckZvck9iamVjdFdpdGhJbW1vcnRhbFN0cnVjdHVy
ZURlc3RydWN0b3Ioc2l6ZSk7Ci0gICAgZWxzZQotICAgICAgICBhbGxvY2F0b3IgPSAmbV9nbG9i
YWxEYXRhLT5oZWFwLmFsbG9jYXRvckZvck9iamVjdFdpdGhvdXREZXN0cnVjdG9yKHNpemUpOwot
ICAgIGxvYWRQdHIoJmFsbG9jYXRvci0+bV9mcmVlTGlzdC5oZWFkLCByZXN1bHQpOwotICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgcmVzdWx0KSk7Ci0KLSAgICAvLyByZW1vdmUg
dGhlIG9iamVjdCBmcm9tIHRoZSBmcmVlIGxpc3QKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0
KSwgc3RvcmFnZVB0cik7Ci0gICAgc3RvcmVQdHIoc3RvcmFnZVB0ciwgJmFsbG9jYXRvci0+bV9m
cmVlTGlzdC5oZWFkKTsKLQotICAgIC8vIGluaXRpYWxpemUgdGhlIG9iamVjdCdzIHN0cnVjdHVy
ZQotICAgIHN0b3JlUHRyKHN0cnVjdHVyZSwgQWRkcmVzcyhyZXN1bHQsIEpTQ2VsbDo6c3RydWN0
dXJlT2Zmc2V0KCkpKTsKLQotICAgIC8vIGluaXRpYWxpemUgdGhlIG9iamVjdCdzIHByb3BlcnR5
IHN0b3JhZ2UgcG9pbnRlcgotICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoMCksIEFkZHJlc3Mo
cmVzdWx0LCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpKTsKLX0KLQotdGVtcGxhdGUgPHR5
cGVuYW1lIFQ+IGlubGluZSB2b2lkIEpJVDo6ZW1pdEFsbG9jYXRlSlNGaW5hbE9iamVjdChUIHN0
cnVjdHVyZSwgUmVnaXN0ZXJJRCByZXN1bHQsIFJlZ2lzdGVySUQgc2NyYXRjaCkKLXsKLSAgICBl
bWl0QWxsb2NhdGVCYXNpY0pTT2JqZWN0PEpTRmluYWxPYmplY3QsIE1hcmtlZEJsb2NrOjpOb25l
LCBUPihzdHJ1Y3R1cmUsIHJlc3VsdCwgc2NyYXRjaCk7Ci19Ci0KLSNpZiBFTkFCTEUoVkFMVUVf
UFJPRklMRVIpCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQ
cm9maWxlKiB2YWx1ZVByb2ZpbGUpCi17Ci0gICAgQVNTRVJUKHNob3VsZEVtaXRQcm9maWxpbmco
KSk7Ci0gICAgQVNTRVJUKHZhbHVlUHJvZmlsZSk7Ci0KLSAgICBjb25zdCBSZWdpc3RlcklEIHZh
bHVlID0gcmVnVDA7Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICBjb25zdCBSZWdpc3RlcklE
IHZhbHVlVGFnID0gcmVnVDE7Ci0jZW5kaWYKLSAgICBjb25zdCBSZWdpc3RlcklEIHNjcmF0Y2gg
PSByZWdUMzsKLSAgICAKLSAgICBpZiAoVmFsdWVQcm9maWxlOjpudW1iZXJPZkJ1Y2tldHMgPT0g
MSkgewotICAgICAgICAvLyBXZSdyZSBpbiBhIHNpbXBsZSBjb25maWd1cmF0aW9uOiBvbmx5IG9u
ZSBidWNrZXQsIHNvIHdlIGNhbiBqdXN0IGRvIGEgZGlyZWN0Ci0gICAgICAgIC8vIHN0b3JlLgot
I2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHN0b3JlNjQodmFsdWUsIHZhbHVlUHJvZmlsZS0+
bV9idWNrZXRzKTsKLSNlbHNlCi0gICAgICAgIEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqIGRlc2Ny
aXB0b3IgPSBiaXR3aXNlX2Nhc3Q8RW5jb2RlZFZhbHVlRGVzY3JpcHRvcio+KHZhbHVlUHJvZmls
ZS0+bV9idWNrZXRzKTsKLSAgICAgICAgc3RvcmUzMih2YWx1ZSwgJmRlc2NyaXB0b3ItPmFzQml0
cy5wYXlsb2FkKTsKLSAgICAgICAgc3RvcmUzMih2YWx1ZVRhZywgJmRlc2NyaXB0b3ItPmFzQml0
cy50YWcpOwotI2VuZGlmCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgaWYgKG1f
cmFuZG9tR2VuZXJhdG9yLmdldFVpbnQzMigpICYgMSkKLSAgICAgICAgYWRkMzIoVHJ1c3RlZElt
bTMyKDEpLCBidWNrZXRDb3VudGVyUmVnaXN0ZXIpOwotICAgIGVsc2UKLSAgICAgICAgYWRkMzIo
VHJ1c3RlZEltbTMyKDMpLCBidWNrZXRDb3VudGVyUmVnaXN0ZXIpOwotICAgIGFuZDMyKFRydXN0
ZWRJbW0zMihWYWx1ZVByb2ZpbGU6OmJ1Y2tldEluZGV4TWFzayksIGJ1Y2tldENvdW50ZXJSZWdp
c3Rlcik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKHZhbHVlUHJvZmlsZS0+bV9idWNrZXRzKSwg
c2NyYXRjaCk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBzdG9yZTY0KHZhbHVlLCBCYXNlSW5k
ZXgoc2NyYXRjaCwgYnVja2V0Q291bnRlclJlZ2lzdGVyLCBUaW1lc0VpZ2h0KSk7Ci0jZWxpZiBV
U0UoSlNWQUxVRTMyXzY0KQotICAgIHN0b3JlMzIodmFsdWUsIEJhc2VJbmRleChzY3JhdGNoLCBi
dWNrZXRDb3VudGVyUmVnaXN0ZXIsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVl
LCB1LmFzQml0cy5wYXlsb2FkKSkpOwotICAgIHN0b3JlMzIodmFsdWVUYWcsIEJhc2VJbmRleChz
Y3JhdGNoLCBidWNrZXRDb3VudGVyUmVnaXN0ZXIsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRP
RihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSk7Ci0jZW5kaWYKLX0KLQotaW5saW5lIHZvaWQgSklU
OjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQotewotICAg
IGlmICghc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShtX2NvZGVCbG9jay0+dmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVPZmZz
ZXQoYnl0ZWNvZGVPZmZzZXQpKTsKLX0KLQotaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKCkKLXsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1fYnl0ZWNvZGVPZmZz
ZXQpOwotfQotI2VuZGlmIC8vIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKLQotaW5saW5lIHZvaWQg
SklUOjplbWl0QXJyYXlQcm9maWxpbmdTaXRlKFJlZ2lzdGVySUQgc3RydWN0dXJlQW5kSW5kZXhp
bmdUeXBlLCBSZWdpc3RlcklEIHNjcmF0Y2gsIEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlKQot
ewotICAgIFVOVVNFRF9QQVJBTShzY3JhdGNoKTsgLy8gV2UgaGFkIGZvdW5kIHRoaXMgc2NyYXRj
aCByZWdpc3RlciB1c2VmdWwgaGVyZSBiZWZvcmUsIHNvIEkgd2lsbCBrZWVwIGl0IGZvciBub3cu
Ci0gICAgCi0gICAgUmVnaXN0ZXJJRCBzdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmVBbmRJbmRleGluZ1R5
cGU7Ci0gICAgUmVnaXN0ZXJJRCBpbmRleGluZ1R5cGUgPSBzdHJ1Y3R1cmVBbmRJbmRleGluZ1R5
cGU7Ci0gICAgCi0gICAgaWYgKGNhbkJlT3B0aW1pemVkKCkpCi0gICAgICAgIHN0b3JlUHRyKHN0
cnVjdHVyZSwgYXJyYXlQcm9maWxlLT5hZGRyZXNzT2ZMYXN0U2VlblN0cnVjdHVyZSgpKTsKLQot
ICAgIGxvYWQ4KEFkZHJlc3Moc3RydWN0dXJlLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNl
dCgpKSwgaW5kZXhpbmdUeXBlKTsKLX0KLQotaW5saW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9m
aWxpbmdTaXRlRm9yQnl0ZWNvZGVJbmRleChSZWdpc3RlcklEIHN0cnVjdHVyZUFuZEluZGV4aW5n
VHlwZSwgUmVnaXN0ZXJJRCBzY3JhdGNoLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQotewotI2lm
IEVOQUJMRShWQUxVRV9QUk9GSUxFUikKLSAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlKHN0cnVj
dHVyZUFuZEluZGV4aW5nVHlwZSwgc2NyYXRjaCwgbV9jb2RlQmxvY2stPmdldE9yQWRkQXJyYXlQ
cm9maWxlKGJ5dGVjb2RlSW5kZXgpKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGJ5dGVjb2Rl
SW5kZXgpOwotICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGUoc3RydWN0dXJlQW5kSW5kZXhpbmdU
eXBlLCBzY3JhdGNoLCAwKTsKLSNlbmRpZgotfQotCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRBcnJh
eVByb2ZpbGVTdG9yZVRvSG9sZVNwZWNpYWxDYXNlKEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxl
KQotewotI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikgICAgCi0gICAgc3RvcmU4KFRydXN0ZWRJ
bW0zMigxKSwgYXJyYXlQcm9maWxlLT5hZGRyZXNzT2ZNYXlTdG9yZVRvSG9sZSgpKTsKLSNlbHNl
Ci0gICAgVU5VU0VEX1BBUkFNKGFycmF5UHJvZmlsZSk7Ci0jZW5kaWYKLX0KLQotc3RhdGljIGlu
bGluZSBib29sIGFycmF5UHJvZmlsZVNhdyhBcnJheU1vZGVzIGFycmF5TW9kZXMsIEluZGV4aW5n
VHlwZSBjYXBhYmlsaXR5KQotewotI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKLSAgICByZXR1
cm4gYXJyYXlNb2Rlc0luY2x1ZGUoYXJyYXlNb2RlcywgY2FwYWJpbGl0eSk7Ci0jZWxzZQotICAg
IFVOVVNFRF9QQVJBTShhcnJheU1vZGVzKTsKLSAgICBVTlVTRURfUEFSQU0oY2FwYWJpbGl0eSk7
Ci0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi19Ci0KLWlubGluZSBKSVRBcnJheU1vZGUgSklU
OjpjaG9vc2VBcnJheU1vZGUoQXJyYXlQcm9maWxlKiBwcm9maWxlKQotewotICAgIHByb2ZpbGUt
PmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihtX2NvZGVCbG9jayk7Ci0gICAgQXJyYXlNb2RlcyBh
cnJheU1vZGVzID0gcHJvZmlsZS0+b2JzZXJ2ZWRBcnJheU1vZGVzKCk7Ci0gICAgaWYgKGFycmF5
UHJvZmlsZVNhdyhhcnJheU1vZGVzLCBEb3VibGVTaGFwZSkpCi0gICAgICAgIHJldHVybiBKSVRE
b3VibGU7Ci0gICAgaWYgKGFycmF5UHJvZmlsZVNhdyhhcnJheU1vZGVzLCBJbnQzMlNoYXBlKSkK
LSAgICAgICAgcmV0dXJuIEpJVEludDMyOwotICAgIGlmIChhcnJheVByb2ZpbGVTYXcoYXJyYXlN
b2RlcywgQXJyYXlTdG9yYWdlU2hhcGUpKQotICAgICAgICByZXR1cm4gSklUQXJyYXlTdG9yYWdl
OwotICAgIHJldHVybiBKSVRDb250aWd1b3VzOwotfQotCi0jaWYgVVNFKEpTVkFMVUUzMl82NCkK
LQotaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZFRhZyhpbnQgaW5kZXgsIFJlZ2lzdGVySUQgdGFn
KQotewotICAgIFJlZ2lzdGVySUQgbWFwcGVkVGFnOwotICAgIGlmIChnZXRNYXBwZWRUYWcoaW5k
ZXgsIG1hcHBlZFRhZykpIHsKLSAgICAgICAgbW92ZShtYXBwZWRUYWcsIHRhZyk7Ci0gICAgICAg
IHVubWFwKHRhZyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAobV9jb2RlQmxv
Y2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGluZGV4KSkgewotICAgICAgICBtb3ZlKEltbTMy
KGdldENvbnN0YW50T3BlcmFuZChpbmRleCkudGFnKCkpLCB0YWcpOwotICAgICAgICB1bm1hcCh0
YWcpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbG9hZDMyKHRhZ0ZvcihpbmRleCks
IHRhZyk7Ci0gICAgdW5tYXAodGFnKTsKLX0KLQotaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZFBh
eWxvYWQoaW50IGluZGV4LCBSZWdpc3RlcklEIHBheWxvYWQpCi17Ci0gICAgUmVnaXN0ZXJJRCBt
YXBwZWRQYXlsb2FkOwotICAgIGlmIChnZXRNYXBwZWRQYXlsb2FkKGluZGV4LCBtYXBwZWRQYXls
b2FkKSkgewotICAgICAgICBtb3ZlKG1hcHBlZFBheWxvYWQsIHBheWxvYWQpOwotICAgICAgICB1
bm1hcChwYXlsb2FkKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChtX2NvZGVC
bG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW5kZXgpKSB7Ci0gICAgICAgIG1vdmUoSW1t
MzIoZ2V0Q29uc3RhbnRPcGVyYW5kKGluZGV4KS5wYXlsb2FkKCkpLCBwYXlsb2FkKTsKLSAgICAg
ICAgdW5tYXAocGF5bG9hZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBsb2FkMzIo
cGF5bG9hZEZvcihpbmRleCksIHBheWxvYWQpOwotICAgIHVubWFwKHBheWxvYWQpOwotfQotCi1p
bmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkKGNvbnN0IEpTVmFsdWUmIHYsIFJlZ2lzdGVySUQgdGFn
LCBSZWdpc3RlcklEIHBheWxvYWQpCi17Ci0gICAgbW92ZShJbW0zMih2LnBheWxvYWQoKSksIHBh
eWxvYWQpOwotICAgIG1vdmUoSW1tMzIodi50YWcoKSksIHRhZyk7Ci19Ci0KLWlubGluZSB2b2lk
IEpJVDo6ZW1pdExvYWQoaW50IGluZGV4LCBSZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJRCBwYXls
b2FkLCBSZWdpc3RlcklEIGJhc2UpCi17Ci0gICAgQVNTRVJUKHRhZyAhPSBwYXlsb2FkKTsKLQot
ICAgIGlmIChiYXNlID09IGNhbGxGcmFtZVJlZ2lzdGVyKSB7Ci0gICAgICAgIEFTU0VSVChwYXls
b2FkICE9IGJhc2UpOwotICAgICAgICBlbWl0TG9hZFBheWxvYWQoaW5kZXgsIHBheWxvYWQpOwot
ICAgICAgICBlbWl0TG9hZFRhZyhpbmRleCwgdGFnKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGlmIChwYXlsb2FkID09IGJhc2UpIHsgLy8gYXZvaWQgc3RvbXBpbmcgYmFzZQotICAg
ICAgICBsb2FkMzIodGFnRm9yKGluZGV4LCBiYXNlKSwgdGFnKTsKLSAgICAgICAgbG9hZDMyKHBh
eWxvYWRGb3IoaW5kZXgsIGJhc2UpLCBwYXlsb2FkKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGxvYWQzMihwYXlsb2FkRm9yKGluZGV4LCBiYXNlKSwgcGF5bG9hZCk7Ci0gICAgbG9h
ZDMyKHRhZ0ZvcihpbmRleCwgYmFzZSksIHRhZyk7Ci19Ci0KLWlubGluZSB2b2lkIEpJVDo6ZW1p
dExvYWQyKGludCBpbmRleDEsIFJlZ2lzdGVySUQgdGFnMSwgUmVnaXN0ZXJJRCBwYXlsb2FkMSwg
aW50IGluZGV4MiwgUmVnaXN0ZXJJRCB0YWcyLCBSZWdpc3RlcklEIHBheWxvYWQyKQotewotICAg
IGlmIChpc01hcHBlZChpbmRleDEpKSB7Ci0gICAgICAgIGVtaXRMb2FkKGluZGV4MSwgdGFnMSwg
cGF5bG9hZDEpOwotICAgICAgICBlbWl0TG9hZChpbmRleDIsIHRhZzIsIHBheWxvYWQyKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBlbWl0TG9hZChpbmRleDIsIHRhZzIsIHBheWxvYWQy
KTsKLSAgICBlbWl0TG9hZChpbmRleDEsIHRhZzEsIHBheWxvYWQxKTsKLX0KLQotaW5saW5lIHZv
aWQgSklUOjplbWl0TG9hZERvdWJsZShpbnQgaW5kZXgsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKLXsK
LSAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGluZGV4KSkgewot
ICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGluQ29uc3RhbnRQb29sID0gbV9jb2RlQmxv
Y2stPmNvbnN0YW50UmVnaXN0ZXIoaW5kZXgpOwotICAgICAgICBsb2FkRG91YmxlKCZpbkNvbnN0
YW50UG9vbCwgdmFsdWUpOwotICAgIH0gZWxzZQotICAgICAgICBsb2FkRG91YmxlKGFkZHJlc3NG
b3IoaW5kZXgpLCB2YWx1ZSk7Ci19Ci0KLWlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWRJbnQzMlRv
RG91YmxlKGludCBpbmRleCwgRlBSZWdpc3RlcklEIHZhbHVlKQotewotICAgIGlmIChtX2NvZGVC
bG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW5kZXgpKSB7Ci0gICAgICAgIFdyaXRlQmFy
cmllcjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wgPSBtX2NvZGVCbG9jay0+Y29uc3RhbnRSZWdp
c3RlcihpbmRleCk7Ci0gICAgICAgIGNoYXIqIGJ5dGVQb2ludGVyID0gcmVpbnRlcnByZXRfY2Fz
dDxjaGFyKj4oJmluQ29uc3RhbnRQb29sKTsKLSAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUo
QWJzb2x1dGVBZGRyZXNzKGJ5dGVQb2ludGVyICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUu
YXNCaXRzLnBheWxvYWQpKSwgdmFsdWUpOwotICAgIH0gZWxzZQotICAgICAgICBjb252ZXJ0SW50
MzJUb0RvdWJsZShwYXlsb2FkRm9yKGluZGV4KSwgdmFsdWUpOwotfQotCi1pbmxpbmUgdm9pZCBK
SVQ6OmVtaXRTdG9yZShpbnQgaW5kZXgsIFJlZ2lzdGVySUQgdGFnLCBSZWdpc3RlcklEIHBheWxv
YWQsIFJlZ2lzdGVySUQgYmFzZSkKLXsKLSAgICBzdG9yZTMyKHBheWxvYWQsIHBheWxvYWRGb3Io
aW5kZXgsIGJhc2UpKTsKLSAgICBzdG9yZTMyKHRhZywgdGFnRm9yKGluZGV4LCBiYXNlKSk7Ci19
Ci0KLWlubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlSW50MzIoaW50IGluZGV4LCBSZWdpc3RlcklE
IHBheWxvYWQsIGJvb2wgaW5kZXhJc0ludDMyKQotewotICAgIHN0b3JlMzIocGF5bG9hZCwgcGF5
bG9hZEZvcihpbmRleCwgY2FsbEZyYW1lUmVnaXN0ZXIpKTsKLSAgICBpZiAoIWluZGV4SXNJbnQz
MikKLSAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCB0YWdG
b3IoaW5kZXgsIGNhbGxGcmFtZVJlZ2lzdGVyKSk7Ci19Ci0KLWlubGluZSB2b2lkIEpJVDo6ZW1p
dFN0b3JlQW5kTWFwSW50MzIoaW50IGluZGV4LCBSZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJRCBw
YXlsb2FkLCBib29sIGluZGV4SXNJbnQzMiwgc2l6ZV90IG9wY29kZUxlbmd0aCkKLXsKLSAgICBl
bWl0U3RvcmVJbnQzMihpbmRleCwgcGF5bG9hZCwgaW5kZXhJc0ludDMyKTsKLSAgICBtYXAobV9i
eXRlY29kZU9mZnNldCArIG9wY29kZUxlbmd0aCwgaW5kZXgsIHRhZywgcGF5bG9hZCk7Ci19Ci0K
LWlubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlSW50MzIoaW50IGluZGV4LCBUcnVzdGVkSW1tMzIg
cGF5bG9hZCwgYm9vbCBpbmRleElzSW50MzIpCi17Ci0gICAgc3RvcmUzMihwYXlsb2FkLCBwYXls
b2FkRm9yKGluZGV4LCBjYWxsRnJhbWVSZWdpc3RlcikpOwotICAgIGlmICghaW5kZXhJc0ludDMy
KQotICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHRhZ0Zv
cihpbmRleCwgY2FsbEZyYW1lUmVnaXN0ZXIpKTsKLX0KLQotaW5saW5lIHZvaWQgSklUOjplbWl0
U3RvcmVDZWxsKGludCBpbmRleCwgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXNDZWxs
KQotewotICAgIHN0b3JlMzIocGF5bG9hZCwgcGF5bG9hZEZvcihpbmRleCwgY2FsbEZyYW1lUmVn
aXN0ZXIpKTsKLSAgICBpZiAoIWluZGV4SXNDZWxsKQotICAgICAgICBzdG9yZTMyKFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgdGFnRm9yKGluZGV4LCBjYWxsRnJhbWVSZWdpc3Rlcikp
OwotfQotCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZUJvb2woaW50IGluZGV4LCBSZWdpc3Rl
cklEIHBheWxvYWQsIGJvb2wgaW5kZXhJc0Jvb2wpCi17Ci0gICAgc3RvcmUzMihwYXlsb2FkLCBw
YXlsb2FkRm9yKGluZGV4LCBjYWxsRnJhbWVSZWdpc3RlcikpOwotICAgIGlmICghaW5kZXhJc0Jv
b2wpCi0gICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJvb2xlYW5UYWcpLCB0
YWdGb3IoaW5kZXgsIGNhbGxGcmFtZVJlZ2lzdGVyKSk7Ci19Ci0KLWlubGluZSB2b2lkIEpJVDo6
ZW1pdFN0b3JlRG91YmxlKGludCBpbmRleCwgRlBSZWdpc3RlcklEIHZhbHVlKQotewotICAgIHN0
b3JlRG91YmxlKHZhbHVlLCBhZGRyZXNzRm9yKGluZGV4KSk7Ci19Ci0KLWlubGluZSB2b2lkIEpJ
VDo6ZW1pdFN0b3JlKGludCBpbmRleCwgY29uc3QgSlNWYWx1ZSBjb25zdGFudCwgUmVnaXN0ZXJJ
RCBiYXNlKQotewotICAgIHN0b3JlMzIoSW1tMzIoY29uc3RhbnQucGF5bG9hZCgpKSwgcGF5bG9h
ZEZvcihpbmRleCwgYmFzZSkpOwotICAgIHN0b3JlMzIoSW1tMzIoY29uc3RhbnQudGFnKCkpLCB0
YWdGb3IoaW5kZXgsIGJhc2UpKTsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdElu
aXRSZWdpc3Rlcih1bnNpZ25lZCBkc3QpCi17Ci0gICAgZW1pdFN0b3JlKGRzdCwganNVbmRlZmlu
ZWQoKSk7Ci19Ci0KLWlubGluZSBib29sIEpJVDo6aXNMYWJlbGVkKHVuc2lnbmVkIGJ5dGVjb2Rl
T2Zmc2V0KQotewotICAgIGZvciAoc2l6ZV90IG51bWJlck9mSnVtcFRhcmdldHMgPSBtX2NvZGVC
bG9jay0+bnVtYmVyT2ZKdW1wVGFyZ2V0cygpOyBtX2p1bXBUYXJnZXRJbmRleCAhPSBudW1iZXJP
Zkp1bXBUYXJnZXRzOyArK21fanVtcFRhcmdldEluZGV4KSB7Ci0gICAgICAgIHVuc2lnbmVkIGp1
bXBUYXJnZXQgPSBtX2NvZGVCbG9jay0+anVtcFRhcmdldChtX2p1bXBUYXJnZXRJbmRleCk7Ci0g
ICAgICAgIGlmIChqdW1wVGFyZ2V0ID09IGJ5dGVjb2RlT2Zmc2V0KQotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIGlmIChqdW1wVGFyZ2V0ID4gYnl0ZWNvZGVPZmZzZXQpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotaW5s
aW5lIHZvaWQgSklUOjptYXAodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIGludCB2aXJ0dWFsUmVn
aXN0ZXJJbmRleCwgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCkKLXsKLSAgICBp
ZiAoaXNMYWJlbGVkKGJ5dGVjb2RlT2Zmc2V0KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9t
YXBwZWRCeXRlY29kZU9mZnNldCA9IGJ5dGVjb2RlT2Zmc2V0OwotICAgIG1fbWFwcGVkVmlydHVh
bFJlZ2lzdGVySW5kZXggPSB2aXJ0dWFsUmVnaXN0ZXJJbmRleDsKLSAgICBtX21hcHBlZFRhZyA9
IHRhZzsKLSAgICBtX21hcHBlZFBheWxvYWQgPSBwYXlsb2FkOwotICAgIAotICAgIEFTU0VSVCgh
Y2FuQmVPcHRpbWl6ZWQoKSB8fCBtX21hcHBlZFBheWxvYWQgPT0gcmVnVDApOwotICAgIEFTU0VS
VCghY2FuQmVPcHRpbWl6ZWQoKSB8fCBtX21hcHBlZFRhZyA9PSByZWdUMSk7Ci19Ci0KLWlubGlu
ZSB2b2lkIEpJVDo6dW5tYXAoUmVnaXN0ZXJJRCByZWdpc3RlcklEKQotewotICAgIGlmIChtX21h
cHBlZFRhZyA9PSByZWdpc3RlcklEKQotICAgICAgICBtX21hcHBlZFRhZyA9IChSZWdpc3RlcklE
KS0xOwotICAgIGVsc2UgaWYgKG1fbWFwcGVkUGF5bG9hZCA9PSByZWdpc3RlcklEKQotICAgICAg
ICBtX21hcHBlZFBheWxvYWQgPSAoUmVnaXN0ZXJJRCktMTsKLX0KLQotaW5saW5lIHZvaWQgSklU
Ojp1bm1hcCgpCi17Ci0gICAgbV9tYXBwZWRCeXRlY29kZU9mZnNldCA9ICh1bnNpZ25lZCktMTsK
LSAgICBtX21hcHBlZFZpcnR1YWxSZWdpc3RlckluZGV4ID0gSlNTdGFjazo6UmV0dXJuUEM7Ci0g
ICAgbV9tYXBwZWRUYWcgPSAoUmVnaXN0ZXJJRCktMTsKLSAgICBtX21hcHBlZFBheWxvYWQgPSAo
UmVnaXN0ZXJJRCktMTsKLX0KLQotaW5saW5lIGJvb2wgSklUOjppc01hcHBlZChpbnQgdmlydHVh
bFJlZ2lzdGVySW5kZXgpCi17Ci0gICAgaWYgKG1fbWFwcGVkQnl0ZWNvZGVPZmZzZXQgIT0gbV9i
eXRlY29kZU9mZnNldCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChtX21hcHBlZFZp
cnR1YWxSZWdpc3RlckluZGV4ICE9IHZpcnR1YWxSZWdpc3RlckluZGV4KQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWlubGluZSBib29sIEpJVDo6Z2V0TWFw
cGVkUGF5bG9hZChpbnQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIFJlZ2lzdGVySUQmIHBheWxvYWQp
Ci17Ci0gICAgaWYgKG1fbWFwcGVkQnl0ZWNvZGVPZmZzZXQgIT0gbV9ieXRlY29kZU9mZnNldCkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChtX21hcHBlZFZpcnR1YWxSZWdpc3Rlcklu
ZGV4ICE9IHZpcnR1YWxSZWdpc3RlckluZGV4KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
aWYgKG1fbWFwcGVkUGF5bG9hZCA9PSAoUmVnaXN0ZXJJRCktMSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIHBheWxvYWQgPSBtX21hcHBlZFBheWxvYWQ7Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLWlubGluZSBib29sIEpJVDo6Z2V0TWFwcGVkVGFnKGludCB2aXJ0dWFsUmVnaXN0ZXJJbmRl
eCwgUmVnaXN0ZXJJRCYgdGFnKQotewotICAgIGlmIChtX21hcHBlZEJ5dGVjb2RlT2Zmc2V0ICE9
IG1fYnl0ZWNvZGVPZmZzZXQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAobV9tYXBw
ZWRWaXJ0dWFsUmVnaXN0ZXJJbmRleCAhPSB2aXJ0dWFsUmVnaXN0ZXJJbmRleCkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIGlmIChtX21hcHBlZFRhZyA9PSAoUmVnaXN0ZXJJRCktMSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHRhZyA9IG1fbWFwcGVkVGFnOwotICAgIHJldHVybiB0
cnVlOwotfQotCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChp
bnQgdmlydHVhbFJlZ2lzdGVySW5kZXgpCi17Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93
bk5vdEltbWVkaWF0ZSh2aXJ0dWFsUmVnaXN0ZXJJbmRleCkpIHsKLSAgICAgICAgaWYgKG1fY29k
ZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleCh2aXJ0dWFsUmVnaXN0ZXJJbmRleCkpCi0g
ICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBhZGRTbG93Q2FzZShlbWl0SnVtcElmTm90SlNDZWxsKHZpcnR1YWxSZWdpc3RlckluZGV4KSk7
Ci0gICAgfQotfQotCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChpbnQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIFJlZ2lzdGVySUQgdGFnKQotewotICAgIGlmICgh
bV9jb2RlQmxvY2stPmlzS25vd25Ob3RJbW1lZGlhdGUodmlydHVhbFJlZ2lzdGVySW5kZXgpKSB7
Ci0gICAgICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgodmlydHVh
bFJlZ2lzdGVySW5kZXgpKQotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHRhZywg
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKSk7Ci0gICAgfQotfQotCi1BTFdBWVNfSU5M
SU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudEltbWVkaWF0ZUludCh1bnNpZ25lZCBzcmMp
Ci17Ci0gICAgcmV0dXJuIG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChzcmMp
ICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKLX0KLQotQUxXQVlTX0lOTElO
RSBib29sIEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50SW1tZWRpYXRlSW50KHVuc2lnbmVkIG9wMSwg
dW5zaWduZWQgb3AyLCB1bnNpZ25lZCYgb3AsIGludDMyX3QmIGNvbnN0YW50KQotewotICAgIGlm
IChpc09wZXJhbmRDb25zdGFudEltbWVkaWF0ZUludChvcDEpKSB7Ci0gICAgICAgIGNvbnN0YW50
ID0gZ2V0Q29uc3RhbnRPcGVyYW5kKG9wMSkuYXNJbnQzMigpOwotICAgICAgICBvcCA9IG9wMjsK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKGlzT3BlcmFuZENvbnN0YW50
SW1tZWRpYXRlSW50KG9wMikpIHsKLSAgICAgICAgY29uc3RhbnQgPSBnZXRDb25zdGFudE9wZXJh
bmQob3AyKS5hc0ludDMyKCk7Ci0gICAgICAgIG9wID0gb3AxOwotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi0jZWxzZSAvLyBVU0UoSlNW
QUxVRTMyXzY0KQotCi0vKiBEZXByZWNhdGVkOiBQbGVhc2UgdXNlIEpJVFN0dWJDYWxsIGluc3Rl
YWQuICovCi0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRKSVRTdHViQXJnKHVuc2ln
bmVkIGFyZ3VtZW50TnVtYmVyLCBSZWdpc3RlcklEIGRzdCkKLXsKLSAgICB1bnNpZ25lZCBhcmd1
bWVudFN0YWNrT2Zmc2V0ID0gKGFyZ3VtZW50TnVtYmVyICogKHNpemVvZihKU1ZhbHVlKSAvIHNp
emVvZih2b2lkKikpKSArIEpJVFNUQUNLRlJBTUVfQVJHU19JTkRFWDsKLSAgICBwZWVrNjQoZHN0
LCBhcmd1bWVudFN0YWNrT2Zmc2V0KTsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6a2ls
bExhc3RSZXN1bHRSZWdpc3RlcigpCi17Ci0gICAgbV9sYXN0UmVzdWx0Qnl0ZWNvZGVSZWdpc3Rl
ciA9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCk7Ci19Ci0KLS8vIGdldCBhcmcgcHV0
cyBhbiBhcmcgZnJvbSB0aGUgU0YgcmVnaXN0ZXIgYXJyYXkgaW50byBhIGgvdyByZWdpc3Rlcgot
QUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnQgc3JjLCBS
ZWdpc3RlcklEIGRzdCkKLXsKLSAgICBBU1NFUlQobV9ieXRlY29kZU9mZnNldCAhPSAodW5zaWdu
ZWQpLTEpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9j
b2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlT2Zmc2V0IGlzIHNldC4KLQot
ICAgIC8vIFRPRE86IHdlIHdhbnQgdG8gcmV1c2UgdmFsdWVzIHRoYXQgYXJlIGFscmVhZHkgaW4g
cmVnaXN0ZXJzIGlmIHdlIGNhbiAtIGFkZCBhIHJlZ2lzdGVyIGFsbG9jYXRvciEKLSAgICBpZiAo
bV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHNyYykpIHsKLSAgICAgICAgSlNW
YWx1ZSB2YWx1ZSA9IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwotICAgICAgICBpZiAo
IXZhbHVlLmlzTnVtYmVyKCkpCi0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVl
OjplbmNvZGUodmFsdWUpKSwgZHN0KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbW92ZShJ
bW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUpKSwgZHN0KTsKLSAgICAgICAga2lsbExhc3RSZXN1
bHRSZWdpc3RlcigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKHNyYyA9PSBt
X2xhc3RSZXN1bHRCeXRlY29kZVJlZ2lzdGVyICYmIG1fY29kZUJsb2NrLT5pc1RlbXBvcmFyeVJl
Z2lzdGVySW5kZXgoc3JjKSAmJiAhYXRKdW1wVGFyZ2V0KCkpIHsKLSAgICAgICAgLy8gVGhlIGFy
Z3VtZW50IHdlIHdhbnQgaXMgYWxyZWFkeSBzdG9yZWQgaW4gZWF4Ci0gICAgICAgIGlmIChkc3Qg
IT0gY2FjaGVkUmVzdWx0UmVnaXN0ZXIpCi0gICAgICAgICAgICBtb3ZlKGNhY2hlZFJlc3VsdFJl
Z2lzdGVyLCBkc3QpOwotICAgICAgICBraWxsTGFzdFJlc3VsdFJlZ2lzdGVyKCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBsb2FkNjQoQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rlciwg
c3JjICogc2l6ZW9mKFJlZ2lzdGVyKSksIGRzdCk7Ci0gICAga2lsbExhc3RSZXN1bHRSZWdpc3Rl
cigpOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVy
cyhpbnQgc3JjMSwgUmVnaXN0ZXJJRCBkc3QxLCBpbnQgc3JjMiwgUmVnaXN0ZXJJRCBkc3QyKQot
ewotICAgIGlmIChzcmMyID09IG1fbGFzdFJlc3VsdEJ5dGVjb2RlUmVnaXN0ZXIpIHsKLSAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMyLCBkc3QyKTsKLSAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzcmMxLCBkc3QxKTsKLSAgICB9IGVsc2UgewotICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNyYzEsIGRzdDEpOwotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNyYzIsIGRzdDIpOwotICAgIH0KLX0KLQotQUxXQVlTX0lOTElORSBpbnQzMl90IEpJVDo6
Z2V0Q29uc3RhbnRPcGVyYW5kSW1tZWRpYXRlSW50KHVuc2lnbmVkIHNyYykKLXsKLSAgICByZXR1
cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNJbnQzMigpOwotfQotCi1BTFdBWVNfSU5MSU5F
IGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudEltbWVkaWF0ZUludCh1bnNpZ25lZCBzcmMpCi17
Ci0gICAgcmV0dXJuIG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChzcmMpICYm
IGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKLX0KLQotQUxXQVlTX0lOTElORSB2
b2lkIEpJVDo6ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcih1bnNpZ25lZCBkc3QsIFJlZ2lzdGVySUQg
ZnJvbSkKLXsKLSAgICBzdG9yZTY0KGZyb20sIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIGRz
dCAqIHNpemVvZihSZWdpc3RlcikpKTsKLSAgICBtX2xhc3RSZXN1bHRCeXRlY29kZVJlZ2lzdGVy
ID0gKGZyb20gPT0gY2FjaGVkUmVzdWx0UmVnaXN0ZXIpID8gc3RhdGljX2Nhc3Q8aW50Pihkc3Qp
IDogc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKTsKLX0KLQotQUxXQVlTX0lOTElORSB2
b2lkIEpJVDo6ZW1pdEluaXRSZWdpc3Rlcih1bnNpZ25lZCBkc3QpCi17Ci0gICAgc3RvcmU2NChU
cnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSwgQWRkcmVzcyhjYWxs
RnJhbWVSZWdpc3RlciwgZHN0ICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwotfQotCi1BTFdBWVNfSU5M
SU5FIEpJVDo6SnVtcCBKSVQ6OmVtaXRKdW1wSWZKU0NlbGwoUmVnaXN0ZXJJRCByZWcpCi17Ci0g
ICAgcmV0dXJuIGJyYW5jaFRlc3Q2NChaZXJvLCByZWcsIHRhZ01hc2tSZWdpc3Rlcik7Ci19Ci0K
LUFMV0FZU19JTkxJTkUgSklUOjpKdW1wIEpJVDo6ZW1pdEp1bXBJZkJvdGhKU0NlbGxzKFJlZ2lz
dGVySUQgcmVnMSwgUmVnaXN0ZXJJRCByZWcyLCBSZWdpc3RlcklEIHNjcmF0Y2gpCi17Ci0gICAg
bW92ZShyZWcxLCBzY3JhdGNoKTsKLSAgICBvcjY0KHJlZzIsIHNjcmF0Y2gpOwotICAgIHJldHVy
biBlbWl0SnVtcElmSlNDZWxsKHNjcmF0Y2gpOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklU
OjplbWl0SnVtcFNsb3dDYXNlSWZKU0NlbGwoUmVnaXN0ZXJJRCByZWcpCi17Ci0gICAgYWRkU2xv
d0Nhc2UoZW1pdEp1bXBJZkpTQ2VsbChyZWcpKTsKLX0KLQotQUxXQVlTX0lOTElORSBKSVQ6Okp1
bXAgSklUOjplbWl0SnVtcElmTm90SlNDZWxsKFJlZ2lzdGVySUQgcmVnKQotewotICAgIHJldHVy
biBicmFuY2hUZXN0NjQoTm9uWmVybywgcmVnLCB0YWdNYXNrUmVnaXN0ZXIpOwotfQotCi1BTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoUmVnaXN0ZXJJ
RCByZWcpCi17Ci0gICAgYWRkU2xvd0Nhc2UoZW1pdEp1bXBJZk5vdEpTQ2VsbChyZWcpKTsKLX0K
LQotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFJl
Z2lzdGVySUQgcmVnLCBpbnQgdlJlZykKLXsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3du
Tm90SW1tZWRpYXRlKHZSZWcpKQotICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
cmVnKTsKLX0KLQotaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZERvdWJsZShpbnQgaW5kZXgsIEZQ
UmVnaXN0ZXJJRCB2YWx1ZSkKLXsKLSAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdp
c3RlckluZGV4KGluZGV4KSkgewotICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGluQ29u
c3RhbnRQb29sID0gbV9jb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIoaW5kZXgpOwotICAgICAg
ICBsb2FkRG91YmxlKCZpbkNvbnN0YW50UG9vbCwgdmFsdWUpOwotICAgIH0gZWxzZQotICAgICAg
ICBsb2FkRG91YmxlKGFkZHJlc3NGb3IoaW5kZXgpLCB2YWx1ZSk7Ci19Ci0KLWlubGluZSB2b2lk
IEpJVDo6ZW1pdExvYWRJbnQzMlRvRG91YmxlKGludCBpbmRleCwgRlBSZWdpc3RlcklEIHZhbHVl
KQotewotICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW5kZXgp
KSB7Ci0gICAgICAgIEFTU0VSVChpc09wZXJhbmRDb25zdGFudEltbWVkaWF0ZUludChpbmRleCkp
OwotICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShJbW0zMihnZXRDb25zdGFudE9wZXJhbmQo
aW5kZXgpLmFzSW50MzIoKSksIHZhbHVlKTsKLSAgICB9IGVsc2UKLSAgICAgICAgY29udmVydElu
dDMyVG9Eb3VibGUoYWRkcmVzc0ZvcihpbmRleCksIHZhbHVlKTsKLX0KLQotQUxXQVlTX0lOTElO
RSBKSVQ6Okp1bXAgSklUOjplbWl0SnVtcElmSW1tZWRpYXRlSW50ZWdlcihSZWdpc3RlcklEIHJl
ZykKLXsKLSAgICByZXR1cm4gYnJhbmNoNjQoQWJvdmVPckVxdWFsLCByZWcsIHRhZ1R5cGVOdW1i
ZXJSZWdpc3Rlcik7Ci19Ci0KLUFMV0FZU19JTkxJTkUgSklUOjpKdW1wIEpJVDo6ZW1pdEp1bXBJ
Zk5vdEltbWVkaWF0ZUludGVnZXIoUmVnaXN0ZXJJRCByZWcpCi17Ci0gICAgcmV0dXJuIGJyYW5j
aDY0KEJlbG93LCByZWcsIHRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7Ci19Ci0KLUFMV0FZU19JTkxJ
TkUgSklUOjpKdW1wIEpJVDo6ZW1pdEp1bXBJZk5vdEltbWVkaWF0ZUludGVnZXJzKFJlZ2lzdGVy
SUQgcmVnMSwgUmVnaXN0ZXJJRCByZWcyLCBSZWdpc3RlcklEIHNjcmF0Y2gpCi17Ci0gICAgbW92
ZShyZWcxLCBzY3JhdGNoKTsKLSAgICBhbmQ2NChyZWcyLCBzY3JhdGNoKTsKLSAgICByZXR1cm4g
ZW1pdEp1bXBJZk5vdEltbWVkaWF0ZUludGVnZXIoc2NyYXRjaCk7Ci19Ci0KLUFMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbWVkaWF0ZUludGVnZXIoUmVnaXN0
ZXJJRCByZWcpCi17Ci0gICAgYWRkU2xvd0Nhc2UoZW1pdEp1bXBJZk5vdEltbWVkaWF0ZUludGVn
ZXIocmVnKSk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEltbWVkaWF0ZUludGVnZXJzKFJlZ2lzdGVySUQgcmVnMSwgUmVnaXN0ZXJJRCByZWcyLCBS
ZWdpc3RlcklEIHNjcmF0Y2gpCi17Ci0gICAgYWRkU2xvd0Nhc2UoZW1pdEp1bXBJZk5vdEltbWVk
aWF0ZUludGVnZXJzKHJlZzEsIHJlZzIsIHNjcmF0Y2gpKTsKLX0KLQotQUxXQVlTX0lOTElORSB2
b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tZWRpYXRlTnVtYmVyKFJlZ2lzdGVySUQg
cmVnKQotewotICAgIGFkZFNsb3dDYXNlKGVtaXRKdW1wSWZOb3RJbW1lZGlhdGVOdW1iZXIocmVn
KSk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRGYXN0QXJpdGhSZVRhZ0ltbWVk
aWF0ZShSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQotewotICAgIGVtaXRGYXN0QXJp
dGhJbnRUb0ltbU5vQ2hlY2soc3JjLCBkZXN0KTsKLX0KLQotLy8gb3BlcmFuZCBpcyBpbnQzMl90
LCBtdXN0IGhhdmUgYmVlbiB6ZXJvLWV4dGVuZGVkIGlmIHJlZ2lzdGVyIGlzIDY0LWJpdC4KLUFM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRGYXN0QXJpdGhJbnRUb0ltbU5vQ2hlY2soUmVnaXN0
ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKLXsKLSAgICBpZiAoc3JjICE9IGRlc3QpCi0gICAg
ICAgIG1vdmUoc3JjLCBkZXN0KTsKLSAgICBvcjY0KHRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgZGVz
dCk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRUYWdBc0Jvb2xJbW1lZGlhdGUo
UmVnaXN0ZXJJRCByZWcpCi17Ci0gICAgb3IzMihUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50
MzJfdD4oVmFsdWVGYWxzZSkpLCByZWcpOwotfQotCi0jZW5kaWYgLy8gVVNFKEpTVkFMVUUzMl82
NCkKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBFTkFCTEUoSklUKQotCi0jZW5k
aWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCShyZXZpc2lvbiAx
MzM5NjUpCShmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lTWV0aG9kcy5o
OjEzMzk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAwNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCwg
MjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpJVElubGluZU1ldGhvZHNfaAorI2Rl
ZmluZSBKSVRJbmxpbmVNZXRob2RzX2gKKworCisjaWYgRU5BQkxFKEpJVCkKKworbmFtZXNwYWNl
IEpTQyB7CisKK0FMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50SW1tZWRp
YXRlRG91YmxlKHVuc2lnbmVkIHNyYykKK3sKKyAgICByZXR1cm4gbV9jb2RlQmxvY2stPmlzQ29u
c3RhbnRSZWdpc3RlckluZGV4KHNyYykgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNEb3Vi
bGUoKTsKK30KKworQUxXQVlTX0lOTElORSBKU1ZhbHVlIEpJVDo6Z2V0Q29uc3RhbnRPcGVyYW5k
KHVuc2lnbmVkIHNyYykKK3sKKyAgICBBU1NFUlQobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdp
c3RlckluZGV4KHNyYykpOworICAgIHJldHVybiBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3Jj
KTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dENlbGxUb0NhbGxGcmFtZUhl
YWRlcihSZWdpc3RlcklEIGZyb20sIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlckVudHJ5IGVudHJ5
KQoreworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6Q2VsbFRhZyksIHRhZ0ZvcihlbnRyeSwgY2FsbEZyYW1lUmVnaXN0ZXIpKTsKKyAgICBz
dG9yZTMyKGZyb20sIHBheWxvYWRGb3IoZW50cnksIGNhbGxGcmFtZVJlZ2lzdGVyKSk7CisjZWxz
ZQorICAgIHN0b3JlNjQoZnJvbSwgYWRkcmVzc0ZvcihlbnRyeSwgY2FsbEZyYW1lUmVnaXN0ZXIp
KTsKKyNlbmRpZgorfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0SW50VG9DYWxs
RnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJFbnRy
eSBlbnRyeSkKK3sKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIHN0b3JlMzIoVHJ1c3RlZElt
bTMyKEludDMyVGFnKSwgaW50VGFnRm9yKGVudHJ5LCBjYWxsRnJhbWVSZWdpc3RlcikpOworICAg
IHN0b3JlMzIoZnJvbSwgaW50UGF5bG9hZEZvcihlbnRyeSwgY2FsbEZyYW1lUmVnaXN0ZXIpKTsK
KyNlbHNlCisgICAgc3RvcmU2NChmcm9tLCBhZGRyZXNzRm9yKGVudHJ5LCBjYWxsRnJhbWVSZWdp
c3RlcikpOworI2VuZGlmCit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRUb0Nh
bGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlckVu
dHJ5IGVudHJ5KQoreworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgc3RvcmVQdHIoZnJvbSwg
cGF5bG9hZEZvcihlbnRyeSwgY2FsbEZyYW1lUmVnaXN0ZXIpKTsKKyNlbHNlCisgICAgc3RvcmU2
NChmcm9tLCBhZGRyZXNzRm9yKGVudHJ5LCBjYWxsRnJhbWVSZWdpc3RlcikpOworI2VuZGlmCit9
CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRJbW1lZGlhdGVUb0NhbGxGcmFtZUhl
YWRlcih2b2lkKiB2YWx1ZSwgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyRW50cnkgZW50cnkpCit7
CisgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cih2YWx1ZSksIEFkZHJlc3MoY2FsbEZyYW1lUmVn
aXN0ZXIsIGVudHJ5ICogc2l6ZW9mKFJlZ2lzdGVyKSkpOworfQorCitBTFdBWVNfSU5MSU5FIHZv
aWQgSklUOjplbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihKU1N0YWNrOjpDYWxsRnJhbWVI
ZWFkZXJFbnRyeSBlbnRyeSwgUmVnaXN0ZXJJRCB0bywgUmVnaXN0ZXJJRCBmcm9tKQoreworICAg
IGxvYWRQdHIoQWRkcmVzcyhmcm9tLCBlbnRyeSAqIHNpemVvZihSZWdpc3RlcikpLCB0byk7Cisj
aWYgVVNFKEpTVkFMVUU2NCkKKyAgICBraWxsTGFzdFJlc3VsdFJlZ2lzdGVyKCk7CisjZW5kaWYK
K30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXIz
MihKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJFbnRyeSBlbnRyeSwgUmVnaXN0ZXJJRCB0bywgUmVn
aXN0ZXJJRCBmcm9tKQoreworICAgIGxvYWQzMihBZGRyZXNzKGZyb20sIGVudHJ5ICogc2l6ZW9m
KFJlZ2lzdGVyKSksIHRvKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIGtpbGxMYXN0UmVzdWx0
UmVnaXN0ZXIoKTsKKyNlbmRpZgorfQorCisjaWYgVVNFKEpTVkFMVUU2NCkKK0FMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OmVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyNjQoSlNTdGFjazo6Q2FsbEZy
YW1lSGVhZGVyRW50cnkgZW50cnksIFJlZ2lzdGVySUQgdG8sIFJlZ2lzdGVySUQgZnJvbSkKK3sK
KyAgICBsb2FkNjQoQWRkcmVzcyhmcm9tLCBlbnRyeSAqIHNpemVvZihSZWdpc3RlcikpLCB0byk7
CisgICAga2lsbExhc3RSZXN1bHRSZWdpc3RlcigpOworfQorI2VuZGlmCisKK0FMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OmVtaXRMb2FkQ2hhcmFjdGVyU3RyaW5nKFJlZ2lzdGVySUQgc3JjLCBSZWdp
c3RlcklEIGRzdCwgSnVtcExpc3QmIGZhaWx1cmVzKQoreworICAgIGZhaWx1cmVzLmFwcGVuZChi
cmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3Moc3JjLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgp
KSwgVHJ1c3RlZEltbVB0cihtX2dsb2JhbERhdGEtPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsK
KyAgICBmYWlsdXJlcy5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHNyYywgVGh1bmtIZWxwZXJzOjpqc1N0cmluZ0xlbmd0aE9mZnNldCgpKSwgVHJ1c3Rl
ZEltbTMyKDEpKSk7CisgICAgbG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzcmMsIFRo
dW5rSGVscGVyczo6anNTdHJpbmdWYWx1ZU9mZnNldCgpKSwgZHN0KTsKKyAgICBmYWlsdXJlcy5h
cHBlbmQoYnJhbmNoVGVzdDMyKFplcm8sIGRzdCkpOworICAgIGxvYWRQdHIoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoZHN0LCBUaHVua0hlbHBlcnM6OnN0cmluZ0ltcGxGbGFnc09mZnNldCgpKSwg
cmVnVDEpOworICAgIGxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZHN0LCBUaHVua0hl
bHBlcnM6OnN0cmluZ0ltcGxEYXRhT2Zmc2V0KCkpLCBkc3QpOworCisgICAgSnVtcExpc3QgaXMx
NkJpdDsKKyAgICBKdW1wTGlzdCBjb250OEJpdDsKKyAgICBpczE2Qml0LmFwcGVuZChicmFuY2hU
ZXN0MzIoWmVybywgcmVnVDEsIFRydXN0ZWRJbW0zMihUaHVua0hlbHBlcnM6OnN0cmluZ0ltcGw4
Qml0RmxhZygpKSkpOworICAgIGxvYWQ4KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGRzdCwgMCks
IGRzdCk7CisgICAgY29udDhCaXQuYXBwZW5kKGp1bXAoKSk7CisgICAgaXMxNkJpdC5saW5rKHRo
aXMpOworICAgIGxvYWQxNihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhkc3QsIDApLCBkc3QpOwor
ICAgIGNvbnQ4Qml0LmxpbmsodGhpcyk7Cit9CisKK0FMV0FZU19JTkxJTkUgSklUOjpDYWxsIEpJ
VDo6ZW1pdE5ha2VkQ2FsbChDb2RlUHRyIGZ1bmN0aW9uKQoreworICAgIEFTU0VSVChtX2J5dGVj
b2RlT2Zmc2V0ICE9ICh1bnNpZ25lZCktMSk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJl
IGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNv
ZGVPZmZzZXQgaXMgc2V0LgorCisgICAgQ2FsbCBuYWtlZENhbGwgPSBuZWFyQ2FsbCgpOworICAg
IG1fY2FsbHMuYXBwZW5kKENhbGxSZWNvcmQobmFrZWRDYWxsLCBtX2J5dGVjb2RlT2Zmc2V0LCBm
dW5jdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKSk7CisgICAgcmV0dXJuIG5ha2VkQ2FsbDsKK30K
KworQUxXQVlTX0lOTElORSBib29sIEpJVDo6YXRKdW1wVGFyZ2V0KCkKK3sKKyAgICB3aGlsZSAo
bV9qdW1wVGFyZ2V0c1Bvc2l0aW9uIDwgbV9jb2RlQmxvY2stPm51bWJlck9mSnVtcFRhcmdldHMo
KSAmJiBtX2NvZGVCbG9jay0+anVtcFRhcmdldChtX2p1bXBUYXJnZXRzUG9zaXRpb24pIDw9IG1f
Ynl0ZWNvZGVPZmZzZXQpIHsKKyAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5qdW1wVGFyZ2V0KG1f
anVtcFRhcmdldHNQb3NpdGlvbikgPT0gbV9ieXRlY29kZU9mZnNldCkKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICArK21fanVtcFRhcmdldHNQb3NpdGlvbjsKKyAgICB9CisgICAg
cmV0dXJuIGZhbHNlOworfQorCisjaWYgZGVmaW5lZChBU1NFTUJMRVJfSEFTX0NPTlNUQU5UX1BP
T0wpICYmIEFTU0VNQkxFUl9IQVNfQ09OU1RBTlRfUE9PTAorCitBTFdBWVNfSU5MSU5FIHZvaWQg
SklUOjpiZWdpblVuaW50ZXJydXB0ZWRTZXF1ZW5jZShpbnQgaW5zblNwYWNlLCBpbnQgY29uc3RT
cGFjZSkKK3sKKyNpZiBDUFUoQVJNX1RSQURJVElPTkFMKQorI2lmbmRlZiBOREVCVUcKKyAgICAv
LyBFbnN1cmUgdGhlIGxhYmVsIGFmdGVyIHRoZSBzZXF1ZW5jZSBjYW4gYWxzbyBmaXQKKyAgICBp
bnNuU3BhY2UgKz0gc2l6ZW9mKEFSTVdvcmQpOworICAgIGNvbnN0U3BhY2UgKz0gc2l6ZW9mKHVp
bnQ2NF90KTsKKyNlbmRpZgorCisgICAgZW5zdXJlU3BhY2UoaW5zblNwYWNlLCBjb25zdFNwYWNl
KTsKKworI2VsaWYgQ1BVKFNINCkKKyNpZm5kZWYgTkRFQlVHCisgICAgaW5zblNwYWNlICs9IHNp
emVvZihTSDRXb3JkKTsKKyAgICBjb25zdFNwYWNlICs9IHNpemVvZih1aW50NjRfdCk7CisjZW5k
aWYKKworICAgIG1fYXNzZW1ibGVyLmVuc3VyZVNwYWNlKGluc25TcGFjZSArIG1fYXNzZW1ibGVy
Lm1heEluc3RydWN0aW9uU2l6ZSArIDIsIGNvbnN0U3BhY2UgKyA4KTsKKyNlbmRpZgorCisjaWYg
ZGVmaW5lZChBU1NFTUJMRVJfSEFTX0NPTlNUQU5UX1BPT0wpICYmIEFTU0VNQkxFUl9IQVNfQ09O
U1RBTlRfUE9PTAorI2lmbmRlZiBOREVCVUcKKyAgICBtX3VuaW50ZXJydXB0ZWRJbnN0cnVjdGlv
blNlcXVlbmNlQmVnaW4gPSBsYWJlbCgpOworICAgIG1fdW5pbnRlcnJ1cHRlZENvbnN0YW50U2Vx
dWVuY2VCZWdpbiA9IHNpemVPZkNvbnN0YW50UG9vbCgpOworI2VuZGlmCisjZW5kaWYKK30KKwor
QUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW5kVW5pbnRlcnJ1cHRlZFNlcXVlbmNlKGludCBpbnNu
U3BhY2UsIGludCBjb25zdFNwYWNlLCBpbnQgZHN0KQoreworICAgIFVOVVNFRF9QQVJBTShkc3Qp
OworI2lmIGRlZmluZWQoQVNTRU1CTEVSX0hBU19DT05TVEFOVF9QT09MKSAmJiBBU1NFTUJMRVJf
SEFTX0NPTlNUQU5UX1BPT0wKKyAgICAvKiBUaGVyZSBhcmUgc2V2ZXJhbCBjYXNlcyB3aGVuIHRo
ZSB1bmludGVycnVwdGVkIHNlcXVlbmNlIGlzIGxhcmdlciB0aGFuCisgICAgICogbWF4aW11bSBy
ZXF1aXJlZCBvZmZzZXQgZm9yIHBhdGhpbmcgdGhlIHNhbWUgc2VxdWVuY2UuIEVnLjogaWYgaW4g
YQorICAgICAqIHVuaW50ZXJydXB0ZWQgc2VxdWVuY2UgdGhlIGxhc3QgbWFjcm9hc3NlbWJsZXIn
cyBpbnN0cnVjdGlvbiBpcyBhIHN0dWIKKyAgICAgKiBjYWxsLCBpdCBlbWl0cyBzdG9yZSBpbnN0
cnVjdGlvbihzKSB3aGljaCBzaG91bGQgbm90IGJlIGluY2x1ZGVkIGluIHRoZQorICAgICAqIGNh
bGN1bGF0aW9uIG9mIGxlbmd0aCBvZiB1bmludGVycnVwdGVkIHNlcXVlbmNlLiBTbywgdGhlIGlu
c25TcGFjZSBhbmQKKyAgICAgKiBjb25zdFNwYWNlIHNob3VsZCBiZSB1cHBlciBsaW1pdCBpbnN0
ZWFkIG9mIGhhcmQgbGltaXQuCisgICAgICovCisjaWYgQ1BVKFNINCkKKyAgICBpZiAoKGRzdCA+
IDE1KSB8fCAoZHN0IDwgLTE2KSkgeworICAgICAgICBpbnNuU3BhY2UgKz0gODsKKyAgICAgICAg
Y29uc3RTcGFjZSArPSAyOworICAgIH0KKworICAgIGlmICgoKGRzdCA+PSAtMTYpICYmIChkc3Qg
PCAwKSkgfHwgKChkc3QgPiA3KSAmJiAoZHN0IDw9IDE1KSkpCisgICAgICAgIGluc25TcGFjZSAr
PSA4OworI2VuZGlmCisgICAgQVNTRVJUKGRpZmZlcmVuY2VCZXR3ZWVuKG1fdW5pbnRlcnJ1cHRl
ZEluc3RydWN0aW9uU2VxdWVuY2VCZWdpbiwgbGFiZWwoKSkgPD0gaW5zblNwYWNlKTsKKyAgICBB
U1NFUlQoc2l6ZU9mQ29uc3RhbnRQb29sKCkgLSBtX3VuaW50ZXJydXB0ZWRDb25zdGFudFNlcXVl
bmNlQmVnaW4gPD0gY29uc3RTcGFjZSk7CisjZW5kaWYKK30KKworI2VuZGlmCisKKyNpZiBDUFUo
QVJNKQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpwcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRl
ckNhbGwoUmVnaXN0ZXJJRCByZWcpCit7CisgICAgbW92ZShsaW5rUmVnaXN0ZXIsIHJlZyk7Cit9
CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0
dXJuKFJlZ2lzdGVySUQgcmVnKQoreworICAgIG1vdmUocmVnLCBsaW5rUmVnaXN0ZXIpOworfQor
CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpyZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVy
bihBZGRyZXNzIGFkZHJlc3MpCit7CisgICAgbG9hZFB0cihhZGRyZXNzLCBsaW5rUmVnaXN0ZXIp
OworfQorI2VsaWYgQ1BVKFNINCkKKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6cHJlc2VydmVS
ZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKFJlZ2lzdGVySUQgcmVnKQoreworICAgIG1fYXNzZW1ibGVy
LnN0c3ByKHJlZyk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnJlc3RvcmVSZXR1cm5B
ZGRyZXNzQmVmb3JlUmV0dXJuKFJlZ2lzdGVySUQgcmVnKQoreworICAgIG1fYXNzZW1ibGVyLmxk
c3ByKHJlZyk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnJlc3RvcmVSZXR1cm5BZGRy
ZXNzQmVmb3JlUmV0dXJuKEFkZHJlc3MgYWRkcmVzcykKK3sKKyAgICBsb2FkUHRyTGlua1JlZyhh
ZGRyZXNzKTsKK30KKworI2VsaWYgQ1BVKE1JUFMpCisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6
OnByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChSZWdpc3RlcklEIHJlZykKK3sKKyAgICBt
b3ZlKHJldHVybkFkZHJlc3NSZWdpc3RlciwgcmVnKTsKK30KKworQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6cmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4oUmVnaXN0ZXJJRCByZWcpCit7
CisgICAgbW92ZShyZWcsIHJldHVybkFkZHJlc3NSZWdpc3Rlcik7Cit9CisKK0FMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKEFkZHJlc3MgYWRk
cmVzcykKK3sKKyAgICBsb2FkUHRyKGFkZHJlc3MsIHJldHVybkFkZHJlc3NSZWdpc3Rlcik7Cit9
CisKKyNlbHNlIC8vIENQVShYODYpIHx8IENQVShYODZfNjQpCisKK0FMV0FZU19JTkxJTkUgdm9p
ZCBKSVQ6OnByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChSZWdpc3RlcklEIHJlZykKK3sK
KyAgICBwb3AocmVnKTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6cmVzdG9yZVJldHVy
bkFkZHJlc3NCZWZvcmVSZXR1cm4oUmVnaXN0ZXJJRCByZWcpCit7CisgICAgcHVzaChyZWcpOwor
fQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpyZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJl
dHVybihBZGRyZXNzIGFkZHJlc3MpCit7CisgICAgcHVzaChhZGRyZXNzKTsKK30KKworI2VuZGlm
CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnJlc3RvcmVBcmd1bWVudFJlZmVyZW5jZSgpCit7
CisgICAgbW92ZShzdGFja1BvaW50ZXJSZWdpc3RlciwgZmlyc3RBcmd1bWVudFJlZ2lzdGVyKTsK
KyAgICBwb2tlKGNhbGxGcmFtZVJlZ2lzdGVyLCBPQkpFQ1RfT0ZGU0VUT0Yoc3RydWN0IEpJVFN0
YWNrRnJhbWUsIGNhbGxGcmFtZSkgLyBzaXplb2Yodm9pZCopKTsKK30KKworQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6dXBkYXRlVG9wQ2FsbEZyYW1lKCkKK3sKKyAgICBBU1NFUlQoc3RhdGljX2Nh
c3Q8aW50PihtX2J5dGVjb2RlT2Zmc2V0KSA+PSAwKTsKKyAgICBpZiAobV9ieXRlY29kZU9mZnNl
dCkgeworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2luKCkgKyBtX2J5dGVjb2RlT2Zmc2V0
ICsgMSksIGludFRhZ0ZvcihKU1N0YWNrOjpBcmd1bWVudENvdW50KSk7CisjZWxzZQorICAgICAg
ICBzdG9yZTMyKFRydXN0ZWRJbW0zMihtX2J5dGVjb2RlT2Zmc2V0ICsgMSksIGludFRhZ0ZvcihK
U1N0YWNrOjpBcmd1bWVudENvdW50KSk7CisjZW5kaWYKKyAgICB9CisgICAgc3RvcmVQdHIoY2Fs
bEZyYW1lUmVnaXN0ZXIsICZtX2dsb2JhbERhdGEtPnRvcENhbGxGcmFtZSk7Cit9CisKK0FMV0FZ
U19JTkxJTkUgdm9pZCBKSVQ6OnJlc3RvcmVBcmd1bWVudFJlZmVyZW5jZUZvclRyYW1wb2xpbmUo
KQoreworI2lmIENQVShYODYpCisgICAgLy8gV2l0aGluIGEgdHJhbXBvbGluZSB0aGUgcmV0dXJu
IGFkZHJlc3Mgd2lsbCBiZSBvbiB0aGUgc3RhY2sgYXQgdGhpcyBwb2ludC4KKyAgICBhZGRQdHIo
VHJ1c3RlZEltbTMyKHNpemVvZih2b2lkKikpLCBzdGFja1BvaW50ZXJSZWdpc3RlciwgZmlyc3RB
cmd1bWVudFJlZ2lzdGVyKTsKKyNlbGlmIENQVShBUk0pCisgICAgbW92ZShzdGFja1BvaW50ZXJS
ZWdpc3RlciwgZmlyc3RBcmd1bWVudFJlZ2lzdGVyKTsKKyNlbGlmIENQVShTSDQpCisgICAgbW92
ZShzdGFja1BvaW50ZXJSZWdpc3RlciwgZmlyc3RBcmd1bWVudFJlZ2lzdGVyKTsKKyNlbmRpZgor
ICAgIC8vIEluIHRoZSB0cmFtcG9saW5lIG9uIHg4Ni02NCwgdGhlIGZpcnN0IGFyZ3VtZW50IHJl
Z2lzdGVyIGlzIG5vdCBvdmVyd3JpdHRlbi4KK30KKworQUxXQVlTX0lOTElORSBKSVQ6Okp1bXAg
SklUOjpjaGVja1N0cnVjdHVyZShSZWdpc3RlcklEIHJlZywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
Cit7CisgICAgcmV0dXJuIGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWcsIEpTQ2VsbDo6
c3RydWN0dXJlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSkpOworfQorCitBTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjpsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBpbnQgdlJlZykKK3sKKyAgICBpZiAoIW1fY29kZUJs
b2NrLT5pc0tub3duTm90SW1tZWRpYXRlKHZSZWcpKQorICAgICAgICBsaW5rU2xvd0Nhc2UoaXRl
cik7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNsb3dDYXNlKEp1bXAganVtcCkK
K3sKKyAgICBBU1NFUlQobV9ieXRlY29kZU9mZnNldCAhPSAodW5zaWduZWQpLTEpOyAvLyBUaGlz
IG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJh
dGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlT2Zmc2V0IGlzIHNldC4KKworICAgIG1fc2xvd0Nhc2Vz
LmFwcGVuZChTbG93Q2FzZUVudHJ5KGp1bXAsIG1fYnl0ZWNvZGVPZmZzZXQpKTsKK30KKworQUxX
QVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xvd0Nhc2UoSnVtcExpc3QganVtcExpc3QpCit7Cisg
ICAgQVNTRVJUKG1fYnl0ZWNvZGVPZmZzZXQgIT0gKHVuc2lnbmVkKS0xKTsgLy8gVGhpcyBtZXRo
b2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24s
IHNvIHRoYXQgbV9ieXRlY29kZU9mZnNldCBpcyBzZXQuCisKKyAgICBjb25zdCBKdW1wTGlzdDo6
SnVtcFZlY3RvciYganVtcFZlY3RvciA9IGp1bXBMaXN0Lmp1bXBzKCk7CisgICAgc2l6ZV90IHNp
emUgPSBqdW1wVmVjdG9yLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7
ICsraSkKKyAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoanVtcFZlY3Rv
cltpXSwgbV9ieXRlY29kZU9mZnNldCkpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjph
ZGRTbG93Q2FzZSgpCit7CisgICAgQVNTRVJUKG1fYnl0ZWNvZGVPZmZzZXQgIT0gKHVuc2lnbmVk
KS0xKTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29s
ZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZU9mZnNldCBpcyBzZXQuCisgICAg
CisgICAgSnVtcCBlbXB0eUp1bXA7IC8vIERvaW5nIGl0IHRoaXMgd2F5IHRvIG1ha2UgV2luZG93
cyBoYXBweS4KKyAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShlbXB0eUp1bXAs
IG1fYnl0ZWNvZGVPZmZzZXQpKTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkSnVt
cChKdW1wIGp1bXAsIGludCByZWxhdGl2ZU9mZnNldCkKK3sKKyAgICBBU1NFUlQobV9ieXRlY29k
ZU9mZnNldCAhPSAodW5zaWduZWQpLTEpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBj
YWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2Rl
T2Zmc2V0IGlzIHNldC4KKworICAgIG1fam1wVGFibGUuYXBwZW5kKEp1bXBUYWJsZShqdW1wLCBt
X2J5dGVjb2RlT2Zmc2V0ICsgcmVsYXRpdmVPZmZzZXQpKTsKK30KKworQUxXQVlTX0lOTElORSB2
b2lkIEpJVDo6ZW1pdEp1bXBTbG93VG9Ib3QoSnVtcCBqdW1wLCBpbnQgcmVsYXRpdmVPZmZzZXQp
Cit7CisgICAgQVNTRVJUKG1fYnl0ZWNvZGVPZmZzZXQgIT0gKHVuc2lnbmVkKS0xKTsgLy8gVGhp
cyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVy
YXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZU9mZnNldCBpcyBzZXQuCisKKyAgICBqdW1wLmxpbmtU
byhtX2xhYmVsc1ttX2J5dGVjb2RlT2Zmc2V0ICsgcmVsYXRpdmVPZmZzZXRdLCB0aGlzKTsKK30K
KworQUxXQVlTX0lOTElORSBKSVQ6Okp1bXAgSklUOjplbWl0SnVtcElmTm90T2JqZWN0KFJlZ2lz
dGVySUQgc3RydWN0dXJlUmVnKQoreworICAgIHJldHVybiBicmFuY2g4KEJlbG93LCBBZGRyZXNz
KHN0cnVjdHVyZVJlZywgU3RydWN0dXJlOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJ
bW0zMihPYmplY3RUeXBlKSk7Cit9CisKK0FMV0FZU19JTkxJTkUgSklUOjpKdW1wIEpJVDo6ZW1p
dEp1bXBJZk5vdFR5cGUoUmVnaXN0ZXJJRCBiYXNlUmVnLCBSZWdpc3RlcklEIHNjcmF0Y2hSZWcs
IEpTVHlwZSB0eXBlKQoreworICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlUmVnLCBKU0NlbGw6OnN0
cnVjdHVyZU9mZnNldCgpKSwgc2NyYXRjaFJlZyk7CisgICAgcmV0dXJuIGJyYW5jaDgoTm90RXF1
YWwsIEFkZHJlc3Moc2NyYXRjaFJlZywgU3RydWN0dXJlOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSks
IFRydXN0ZWRJbW0zMih0eXBlKSk7Cit9CisKKyNpZiBFTkFCTEUoU0FNUExJTkdfRkxBR1MpCitB
TFdBWVNfSU5MSU5FIHZvaWQgSklUOjpzZXRTYW1wbGluZ0ZsYWcoaW50MzJfdCBmbGFnKQorewor
ICAgIEFTU0VSVChmbGFnID49IDEpOworICAgIEFTU0VSVChmbGFnIDw9IDMyKTsKKyAgICBvcjMy
KFRydXN0ZWRJbW0zMigxdSA8PCAoZmxhZyAtIDEpKSwgQWJzb2x1dGVBZGRyZXNzKFNhbXBsaW5n
RmxhZ3M6OmFkZHJlc3NPZkZsYWdzKCkpKTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6
Y2xlYXJTYW1wbGluZ0ZsYWcoaW50MzJfdCBmbGFnKQoreworICAgIEFTU0VSVChmbGFnID49IDEp
OworICAgIEFTU0VSVChmbGFnIDw9IDMyKTsKKyAgICBhbmQzMihUcnVzdGVkSW1tMzIofigxdSA8
PCAoZmxhZyAtIDEpKSksIEFic29sdXRlQWRkcmVzcyhTYW1wbGluZ0ZsYWdzOjphZGRyZXNzT2ZG
bGFncygpKSk7Cit9CisjZW5kaWYKKworI2lmIEVOQUJMRShTQU1QTElOR19DT1VOVEVSUykKK0FM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRDb3VudChBYnN0cmFjdFNhbXBsaW5nQ291bnRlciYg
Y291bnRlciwgaW50MzJfdCBjb3VudCkKK3sKKyAgICBhZGQ2NChUcnVzdGVkSW1tMzIoY291bnQp
LCBBYnNvbHV0ZUFkZHJlc3MoY291bnRlci5hZGRyZXNzT2ZDb3VudGVyKCkpKTsKK30KKyNlbmRp
ZgorCisjaWYgRU5BQkxFKE9QQ09ERV9TQU1QTElORykKKyNpZiBDUFUoWDg2XzY0KQorQUxXQVlT
X0lOTElORSB2b2lkIEpJVDo6c2FtcGxlSW5zdHJ1Y3Rpb24oSW5zdHJ1Y3Rpb24qIGluc3RydWN0
aW9uLCBib29sIGluSG9zdEZ1bmN0aW9uKQoreworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2lu
dGVycHJldGVyLT5zYW1wbGVyKCktPnNhbXBsZVNsb3QoKSksIFg4NlJlZ2lzdGVyczo6ZWN4KTsK
KyAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKG1faW50ZXJwcmV0ZXItPnNhbXBsZXIoKS0+ZW5j
b2RlU2FtcGxlKGluc3RydWN0aW9uLCBpbkhvc3RGdW5jdGlvbikpLCBYODZSZWdpc3RlcnM6OmVj
eCk7Cit9CisjZWxzZQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6c2FtcGxlSW5zdHJ1Y3Rpb24o
SW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBib29sIGluSG9zdEZ1bmN0aW9uKQoreworICAgIHN0
b3JlUHRyKFRydXN0ZWRJbW1QdHIobV9pbnRlcnByZXRlci0+c2FtcGxlcigpLT5lbmNvZGVTYW1w
bGUoaW5zdHJ1Y3Rpb24sIGluSG9zdEZ1bmN0aW9uKSksIG1faW50ZXJwcmV0ZXItPnNhbXBsZXIo
KS0+c2FtcGxlU2xvdCgpKTsKK30KKyNlbmRpZgorI2VuZGlmCisKKyNpZiBFTkFCTEUoQ09ERUJM
T0NLX1NBTVBMSU5HKQorI2lmIENQVShYODZfNjQpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpz
YW1wbGVDb2RlQmxvY2soQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgbW92ZShUcnVzdGVk
SW1tUHRyKG1faW50ZXJwcmV0ZXItPnNhbXBsZXIoKS0+Y29kZUJsb2NrU2xvdCgpKSwgWDg2UmVn
aXN0ZXJzOjplY3gpOworICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoY29kZUJsb2NrKSwgWDg2
UmVnaXN0ZXJzOjplY3gpOworfQorI2Vsc2UKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnNhbXBs
ZUNvZGVCbG9jayhDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICBzdG9yZVB0cihUcnVzdGVk
SW1tUHRyKGNvZGVCbG9jayksIG1faW50ZXJwcmV0ZXItPnNhbXBsZXIoKS0+Y29kZUJsb2NrU2xv
dCgpKTsKK30KKyNlbmRpZgorI2VuZGlmCisKK0FMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3Bl
cmFuZENvbnN0YW50SW1tZWRpYXRlQ2hhcih1bnNpZ25lZCBzcmMpCit7CisgICAgcmV0dXJuIG1f
Y29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChzcmMpICYmIGdldENvbnN0YW50T3Bl
cmFuZChzcmMpLmlzU3RyaW5nKCkgJiYgYXNTdHJpbmcoZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYyku
YXNDZWxsKCkpLT5sZW5ndGgoKSA9PSAxOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2xhc3NU
eXBlLCBNYXJrZWRCbG9jazo6RGVzdHJ1Y3RvclR5cGUgZGVzdHJ1Y3RvclR5cGUsIHR5cGVuYW1l
IFN0cnVjdHVyZVR5cGU+IGlubGluZSB2b2lkIEpJVDo6ZW1pdEFsbG9jYXRlQmFzaWNKU09iamVj
dChTdHJ1Y3R1cmVUeXBlIHN0cnVjdHVyZSwgUmVnaXN0ZXJJRCByZXN1bHQsIFJlZ2lzdGVySUQg
c3RvcmFnZVB0cikKK3sKKyAgICBzaXplX3Qgc2l6ZSA9IENsYXNzVHlwZTo6YWxsb2NhdGlvblNp
emUoSU5MSU5FX1NUT1JBR0VfQ0FQQUNJVFkpOworICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2Nh
dG9yID0gMDsKKyAgICBpZiAoZGVzdHJ1Y3RvclR5cGUgPT0gTWFya2VkQmxvY2s6Ok5vcm1hbCkK
KyAgICAgICAgYWxsb2NhdG9yID0gJm1fZ2xvYmFsRGF0YS0+aGVhcC5hbGxvY2F0b3JGb3JPYmpl
Y3RXaXRoTm9ybWFsRGVzdHJ1Y3RvcihzaXplKTsKKyAgICBlbHNlIGlmIChkZXN0cnVjdG9yVHlw
ZSA9PSBNYXJrZWRCbG9jazo6SW1tb3J0YWxTdHJ1Y3R1cmUpCisgICAgICAgIGFsbG9jYXRvciA9
ICZtX2dsb2JhbERhdGEtPmhlYXAuYWxsb2NhdG9yRm9yT2JqZWN0V2l0aEltbW9ydGFsU3RydWN0
dXJlRGVzdHJ1Y3RvcihzaXplKTsKKyAgICBlbHNlCisgICAgICAgIGFsbG9jYXRvciA9ICZtX2ds
b2JhbERhdGEtPmhlYXAuYWxsb2NhdG9yRm9yT2JqZWN0V2l0aG91dERlc3RydWN0b3Ioc2l6ZSk7
CisgICAgbG9hZFB0cigmYWxsb2NhdG9yLT5tX2ZyZWVMaXN0LmhlYWQsIHJlc3VsdCk7CisgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihaZXJvLCByZXN1bHQpKTsKKworICAgIC8vIHJlbW92
ZSB0aGUgb2JqZWN0IGZyb20gdGhlIGZyZWUgbGlzdAorICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1
bHQpLCBzdG9yYWdlUHRyKTsKKyAgICBzdG9yZVB0cihzdG9yYWdlUHRyLCAmYWxsb2NhdG9yLT5t
X2ZyZWVMaXN0LmhlYWQpOworCisgICAgLy8gaW5pdGlhbGl6ZSB0aGUgb2JqZWN0J3Mgc3RydWN0
dXJlCisgICAgc3RvcmVQdHIoc3RydWN0dXJlLCBBZGRyZXNzKHJlc3VsdCwgSlNDZWxsOjpzdHJ1
Y3R1cmVPZmZzZXQoKSkpOworCisgICAgLy8gaW5pdGlhbGl6ZSB0aGUgb2JqZWN0J3MgcHJvcGVy
dHkgc3RvcmFnZSBwb2ludGVyCisgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cigwKSwgQWRkcmVz
cyhyZXN1bHQsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSkpOworfQorCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4gaW5saW5lIHZvaWQgSklUOjplbWl0QWxsb2NhdGVKU0ZpbmFsT2JqZWN0KFQg
c3RydWN0dXJlLCBSZWdpc3RlcklEIHJlc3VsdCwgUmVnaXN0ZXJJRCBzY3JhdGNoKQoreworICAg
IGVtaXRBbGxvY2F0ZUJhc2ljSlNPYmplY3Q8SlNGaW5hbE9iamVjdCwgTWFya2VkQmxvY2s6Ok5v
bmUsIFQ+KHN0cnVjdHVyZSwgcmVzdWx0LCBzY3JhdGNoKTsKK30KKworI2lmIEVOQUJMRShWQUxV
RV9QUk9GSUxFUikKK2lubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1
ZVByb2ZpbGUqIHZhbHVlUHJvZmlsZSkKK3sKKyAgICBBU1NFUlQoc2hvdWxkRW1pdFByb2ZpbGlu
ZygpKTsKKyAgICBBU1NFUlQodmFsdWVQcm9maWxlKTsKKworICAgIGNvbnN0IFJlZ2lzdGVySUQg
dmFsdWUgPSByZWdUMDsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIGNvbnN0IFJlZ2lzdGVy
SUQgdmFsdWVUYWcgPSByZWdUMTsKKyNlbmRpZgorICAgIGNvbnN0IFJlZ2lzdGVySUQgc2NyYXRj
aCA9IHJlZ1QzOworICAgIAorICAgIGlmIChWYWx1ZVByb2ZpbGU6Om51bWJlck9mQnVja2V0cyA9
PSAxKSB7CisgICAgICAgIC8vIFdlJ3JlIGluIGEgc2ltcGxlIGNvbmZpZ3VyYXRpb246IG9ubHkg
b25lIGJ1Y2tldCwgc28gd2UgY2FuIGp1c3QgZG8gYSBkaXJlY3QKKyAgICAgICAgLy8gc3RvcmUu
CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgc3RvcmU2NCh2YWx1ZSwgdmFsdWVQcm9maWxl
LT5tX2J1Y2tldHMpOworI2Vsc2UKKyAgICAgICAgRW5jb2RlZFZhbHVlRGVzY3JpcHRvciogZGVz
Y3JpcHRvciA9IGJpdHdpc2VfY2FzdDxFbmNvZGVkVmFsdWVEZXNjcmlwdG9yKj4odmFsdWVQcm9m
aWxlLT5tX2J1Y2tldHMpOworICAgICAgICBzdG9yZTMyKHZhbHVlLCAmZGVzY3JpcHRvci0+YXNC
aXRzLnBheWxvYWQpOworICAgICAgICBzdG9yZTMyKHZhbHVlVGFnLCAmZGVzY3JpcHRvci0+YXNC
aXRzLnRhZyk7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAo
bV9yYW5kb21HZW5lcmF0b3IuZ2V0VWludDMyKCkgJiAxKQorICAgICAgICBhZGQzMihUcnVzdGVk
SW1tMzIoMSksIGJ1Y2tldENvdW50ZXJSZWdpc3Rlcik7CisgICAgZWxzZQorICAgICAgICBhZGQz
MihUcnVzdGVkSW1tMzIoMyksIGJ1Y2tldENvdW50ZXJSZWdpc3Rlcik7CisgICAgYW5kMzIoVHJ1
c3RlZEltbTMyKFZhbHVlUHJvZmlsZTo6YnVja2V0SW5kZXhNYXNrKSwgYnVja2V0Q291bnRlclJl
Z2lzdGVyKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIodmFsdWVQcm9maWxlLT5tX2J1Y2tldHMp
LCBzY3JhdGNoKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIHN0b3JlNjQodmFsdWUsIEJhc2VJ
bmRleChzY3JhdGNoLCBidWNrZXRDb3VudGVyUmVnaXN0ZXIsIFRpbWVzRWlnaHQpKTsKKyNlbGlm
IFVTRShKU1ZBTFVFMzJfNjQpCisgICAgc3RvcmUzMih2YWx1ZSwgQmFzZUluZGV4KHNjcmF0Y2gs
IGJ1Y2tldENvdW50ZXJSZWdpc3RlciwgVGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFs
dWUsIHUuYXNCaXRzLnBheWxvYWQpKSk7CisgICAgc3RvcmUzMih2YWx1ZVRhZywgQmFzZUluZGV4
KHNjcmF0Y2gsIGJ1Y2tldENvdW50ZXJSZWdpc3RlciwgVGltZXNFaWdodCwgT0JKRUNUX09GRlNF
VE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpKTsKKyNlbmRpZgorfQorCitpbmxpbmUgdm9pZCBK
SVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpCit7Cisg
ICAgaWYgKCFzaG91bGRFbWl0UHJvZmlsaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKG1fY29kZUJsb2NrLT52YWx1ZVByb2ZpbGVGb3JCeXRlY29kZU9m
ZnNldChieXRlY29kZU9mZnNldCkpOworfQorCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoKQoreworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobV9ieXRlY29kZU9m
ZnNldCk7Cit9CisjZW5kaWYgLy8gRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQorCitpbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRBcnJheVByb2ZpbGluZ1NpdGUoUmVnaXN0ZXJJRCBzdHJ1Y3R1cmVBbmRJbmRl
eGluZ1R5cGUsIFJlZ2lzdGVySUQgc2NyYXRjaCwgQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUp
Cit7CisgICAgVU5VU0VEX1BBUkFNKHNjcmF0Y2gpOyAvLyBXZSBoYWQgZm91bmQgdGhpcyBzY3Jh
dGNoIHJlZ2lzdGVyIHVzZWZ1bCBoZXJlIGJlZm9yZSwgc28gSSB3aWxsIGtlZXAgaXQgZm9yIG5v
dy4KKyAgICAKKyAgICBSZWdpc3RlcklEIHN0cnVjdHVyZSA9IHN0cnVjdHVyZUFuZEluZGV4aW5n
VHlwZTsKKyAgICBSZWdpc3RlcklEIGluZGV4aW5nVHlwZSA9IHN0cnVjdHVyZUFuZEluZGV4aW5n
VHlwZTsKKyAgICAKKyAgICBpZiAoY2FuQmVPcHRpbWl6ZWQoKSkKKyAgICAgICAgc3RvcmVQdHIo
c3RydWN0dXJlLCBhcnJheVByb2ZpbGUtPmFkZHJlc3NPZkxhc3RTZWVuU3RydWN0dXJlKCkpOwor
CisgICAgbG9hZDgoQWRkcmVzcyhzdHJ1Y3R1cmUsIFN0cnVjdHVyZTo6aW5kZXhpbmdUeXBlT2Zm
c2V0KCkpLCBpbmRleGluZ1R5cGUpOworfQorCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBcnJheVBy
b2ZpbGluZ1NpdGVGb3JCeXRlY29kZUluZGV4KFJlZ2lzdGVySUQgc3RydWN0dXJlQW5kSW5kZXhp
bmdUeXBlLCBSZWdpc3RlcklEIHNjcmF0Y2gsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCit7Cisj
aWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQorICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGUoc3Ry
dWN0dXJlQW5kSW5kZXhpbmdUeXBlLCBzY3JhdGNoLCBtX2NvZGVCbG9jay0+Z2V0T3JBZGRBcnJh
eVByb2ZpbGUoYnl0ZWNvZGVJbmRleCkpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oYnl0ZWNv
ZGVJbmRleCk7CisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZShzdHJ1Y3R1cmVBbmRJbmRleGlu
Z1R5cGUsIHNjcmF0Y2gsIDApOworI2VuZGlmCit9CisKK2lubGluZSB2b2lkIEpJVDo6ZW1pdEFy
cmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2UoQXJyYXlQcm9maWxlKiBhcnJheVByb2Zp
bGUpCit7CisjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKSAgICAKKyAgICBzdG9yZTgoVHJ1c3Rl
ZEltbTMyKDEpLCBhcnJheVByb2ZpbGUtPmFkZHJlc3NPZk1heVN0b3JlVG9Ib2xlKCkpOworI2Vs
c2UKKyAgICBVTlVTRURfUEFSQU0oYXJyYXlQcm9maWxlKTsKKyNlbmRpZgorfQorCitzdGF0aWMg
aW5saW5lIGJvb2wgYXJyYXlQcm9maWxlU2F3KEFycmF5TW9kZXMgYXJyYXlNb2RlcywgSW5kZXhp
bmdUeXBlIGNhcGFiaWxpdHkpCit7CisjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQorICAgIHJl
dHVybiBhcnJheU1vZGVzSW5jbHVkZShhcnJheU1vZGVzLCBjYXBhYmlsaXR5KTsKKyNlbHNlCisg
ICAgVU5VU0VEX1BBUkFNKGFycmF5TW9kZXMpOworICAgIFVOVVNFRF9QQVJBTShjYXBhYmlsaXR5
KTsKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKworaW5saW5lIEpJVEFycmF5TW9kZSBK
SVQ6OmNob29zZUFycmF5TW9kZShBcnJheVByb2ZpbGUqIHByb2ZpbGUpCit7CisgICAgcHJvZmls
ZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKG1fY29kZUJsb2NrKTsKKyAgICBBcnJheU1vZGVz
IGFycmF5TW9kZXMgPSBwcm9maWxlLT5vYnNlcnZlZEFycmF5TW9kZXMoKTsKKyAgICBpZiAoYXJy
YXlQcm9maWxlU2F3KGFycmF5TW9kZXMsIERvdWJsZVNoYXBlKSkKKyAgICAgICAgcmV0dXJuIEpJ
VERvdWJsZTsKKyAgICBpZiAoYXJyYXlQcm9maWxlU2F3KGFycmF5TW9kZXMsIEludDMyU2hhcGUp
KQorICAgICAgICByZXR1cm4gSklUSW50MzI7CisgICAgaWYgKGFycmF5UHJvZmlsZVNhdyhhcnJh
eU1vZGVzLCBBcnJheVN0b3JhZ2VTaGFwZSkpCisgICAgICAgIHJldHVybiBKSVRBcnJheVN0b3Jh
Z2U7CisgICAgcmV0dXJuIEpJVENvbnRpZ3VvdXM7Cit9CisKKyNpZiBVU0UoSlNWQUxVRTMyXzY0
KQorCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkVGFnKGludCBpbmRleCwgUmVnaXN0ZXJJRCB0
YWcpCit7CisgICAgUmVnaXN0ZXJJRCBtYXBwZWRUYWc7CisgICAgaWYgKGdldE1hcHBlZFRhZyhp
bmRleCwgbWFwcGVkVGFnKSkgeworICAgICAgICBtb3ZlKG1hcHBlZFRhZywgdGFnKTsKKyAgICAg
ICAgdW5tYXAodGFnKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX2NvZGVC
bG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW5kZXgpKSB7CisgICAgICAgIG1vdmUoSW1t
MzIoZ2V0Q29uc3RhbnRPcGVyYW5kKGluZGV4KS50YWcoKSksIHRhZyk7CisgICAgICAgIHVubWFw
KHRhZyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBsb2FkMzIodGFnRm9yKGluZGV4
KSwgdGFnKTsKKyAgICB1bm1hcCh0YWcpOworfQorCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2Fk
UGF5bG9hZChpbnQgaW5kZXgsIFJlZ2lzdGVySUQgcGF5bG9hZCkKK3sKKyAgICBSZWdpc3RlcklE
IG1hcHBlZFBheWxvYWQ7CisgICAgaWYgKGdldE1hcHBlZFBheWxvYWQoaW5kZXgsIG1hcHBlZFBh
eWxvYWQpKSB7CisgICAgICAgIG1vdmUobWFwcGVkUGF5bG9hZCwgcGF5bG9hZCk7CisgICAgICAg
IHVubWFwKHBheWxvYWQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1fY29k
ZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbmRleCkpIHsKKyAgICAgICAgbW92ZShJ
bW0zMihnZXRDb25zdGFudE9wZXJhbmQoaW5kZXgpLnBheWxvYWQoKSksIHBheWxvYWQpOworICAg
ICAgICB1bm1hcChwYXlsb2FkKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGxvYWQz
MihwYXlsb2FkRm9yKGluZGV4KSwgcGF5bG9hZCk7CisgICAgdW5tYXAocGF5bG9hZCk7Cit9CisK
K2lubGluZSB2b2lkIEpJVDo6ZW1pdExvYWQoY29uc3QgSlNWYWx1ZSYgdiwgUmVnaXN0ZXJJRCB0
YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCkKK3sKKyAgICBtb3ZlKEltbTMyKHYucGF5bG9hZCgpKSwg
cGF5bG9hZCk7CisgICAgbW92ZShJbW0zMih2LnRhZygpKSwgdGFnKTsKK30KKworaW5saW5lIHZv
aWQgSklUOjplbWl0TG9hZChpbnQgaW5kZXgsIFJlZ2lzdGVySUQgdGFnLCBSZWdpc3RlcklEIHBh
eWxvYWQsIFJlZ2lzdGVySUQgYmFzZSkKK3sKKyAgICBBU1NFUlQodGFnICE9IHBheWxvYWQpOwor
CisgICAgaWYgKGJhc2UgPT0gY2FsbEZyYW1lUmVnaXN0ZXIpIHsKKyAgICAgICAgQVNTRVJUKHBh
eWxvYWQgIT0gYmFzZSk7CisgICAgICAgIGVtaXRMb2FkUGF5bG9hZChpbmRleCwgcGF5bG9hZCk7
CisgICAgICAgIGVtaXRMb2FkVGFnKGluZGV4LCB0YWcpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaWYgKHBheWxvYWQgPT0gYmFzZSkgeyAvLyBhdm9pZCBzdG9tcGluZyBiYXNlCisg
ICAgICAgIGxvYWQzMih0YWdGb3IoaW5kZXgsIGJhc2UpLCB0YWcpOworICAgICAgICBsb2FkMzIo
cGF5bG9hZEZvcihpbmRleCwgYmFzZSksIHBheWxvYWQpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgbG9hZDMyKHBheWxvYWRGb3IoaW5kZXgsIGJhc2UpLCBwYXlsb2FkKTsKKyAgICBs
b2FkMzIodGFnRm9yKGluZGV4LCBiYXNlKSwgdGFnKTsKK30KKworaW5saW5lIHZvaWQgSklUOjpl
bWl0TG9hZDIoaW50IGluZGV4MSwgUmVnaXN0ZXJJRCB0YWcxLCBSZWdpc3RlcklEIHBheWxvYWQx
LCBpbnQgaW5kZXgyLCBSZWdpc3RlcklEIHRhZzIsIFJlZ2lzdGVySUQgcGF5bG9hZDIpCit7Cisg
ICAgaWYgKGlzTWFwcGVkKGluZGV4MSkpIHsKKyAgICAgICAgZW1pdExvYWQoaW5kZXgxLCB0YWcx
LCBwYXlsb2FkMSk7CisgICAgICAgIGVtaXRMb2FkKGluZGV4MiwgdGFnMiwgcGF5bG9hZDIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIGVtaXRMb2FkKGluZGV4MiwgdGFnMiwgcGF5bG9h
ZDIpOworICAgIGVtaXRMb2FkKGluZGV4MSwgdGFnMSwgcGF5bG9hZDEpOworfQorCitpbmxpbmUg
dm9pZCBKSVQ6OmVtaXRMb2FkRG91YmxlKGludCBpbmRleCwgRlBSZWdpc3RlcklEIHZhbHVlKQor
eworICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW5kZXgpKSB7
CisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wgPSBtX2NvZGVC
bG9jay0+Y29uc3RhbnRSZWdpc3RlcihpbmRleCk7CisgICAgICAgIGxvYWREb3VibGUoJmluQ29u
c3RhbnRQb29sLCB2YWx1ZSk7CisgICAgfSBlbHNlCisgICAgICAgIGxvYWREb3VibGUoYWRkcmVz
c0ZvcihpbmRleCksIHZhbHVlKTsKK30KKworaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZEludDMy
VG9Eb3VibGUoaW50IGluZGV4LCBGUFJlZ2lzdGVySUQgdmFsdWUpCit7CisgICAgaWYgKG1fY29k
ZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbmRleCkpIHsKKyAgICAgICAgV3JpdGVC
YXJyaWVyPFVua25vd24+JiBpbkNvbnN0YW50UG9vbCA9IG1fY29kZUJsb2NrLT5jb25zdGFudFJl
Z2lzdGVyKGluZGV4KTsKKyAgICAgICAgY2hhciogYnl0ZVBvaW50ZXIgPSByZWludGVycHJldF9j
YXN0PGNoYXIqPigmaW5Db25zdGFudFBvb2wpOworICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJs
ZShBYnNvbHV0ZUFkZHJlc3MoYnl0ZVBvaW50ZXIgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwg
dS5hc0JpdHMucGF5bG9hZCkpLCB2YWx1ZSk7CisgICAgfSBlbHNlCisgICAgICAgIGNvbnZlcnRJ
bnQzMlRvRG91YmxlKHBheWxvYWRGb3IoaW5kZXgpLCB2YWx1ZSk7Cit9CisKK2lubGluZSB2b2lk
IEpJVDo6ZW1pdFN0b3JlKGludCBpbmRleCwgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5
bG9hZCwgUmVnaXN0ZXJJRCBiYXNlKQoreworICAgIHN0b3JlMzIocGF5bG9hZCwgcGF5bG9hZEZv
cihpbmRleCwgYmFzZSkpOworICAgIHN0b3JlMzIodGFnLCB0YWdGb3IoaW5kZXgsIGJhc2UpKTsK
K30KKworaW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmVJbnQzMihpbnQgaW5kZXgsIFJlZ2lzdGVy
SUQgcGF5bG9hZCwgYm9vbCBpbmRleElzSW50MzIpCit7CisgICAgc3RvcmUzMihwYXlsb2FkLCBw
YXlsb2FkRm9yKGluZGV4LCBjYWxsRnJhbWVSZWdpc3RlcikpOworICAgIGlmICghaW5kZXhJc0lu
dDMyKQorICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHRh
Z0ZvcihpbmRleCwgY2FsbEZyYW1lUmVnaXN0ZXIpKTsKK30KKworaW5saW5lIHZvaWQgSklUOjpl
bWl0U3RvcmVBbmRNYXBJbnQzMihpbnQgaW5kZXgsIFJlZ2lzdGVySUQgdGFnLCBSZWdpc3RlcklE
IHBheWxvYWQsIGJvb2wgaW5kZXhJc0ludDMyLCBzaXplX3Qgb3Bjb2RlTGVuZ3RoKQoreworICAg
IGVtaXRTdG9yZUludDMyKGluZGV4LCBwYXlsb2FkLCBpbmRleElzSW50MzIpOworICAgIG1hcCht
X2J5dGVjb2RlT2Zmc2V0ICsgb3Bjb2RlTGVuZ3RoLCBpbmRleCwgdGFnLCBwYXlsb2FkKTsKK30K
KworaW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmVJbnQzMihpbnQgaW5kZXgsIFRydXN0ZWRJbW0z
MiBwYXlsb2FkLCBib29sIGluZGV4SXNJbnQzMikKK3sKKyAgICBzdG9yZTMyKHBheWxvYWQsIHBh
eWxvYWRGb3IoaW5kZXgsIGNhbGxGcmFtZVJlZ2lzdGVyKSk7CisgICAgaWYgKCFpbmRleElzSW50
MzIpCisgICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgdGFn
Rm9yKGluZGV4LCBjYWxsRnJhbWVSZWdpc3RlcikpOworfQorCitpbmxpbmUgdm9pZCBKSVQ6OmVt
aXRTdG9yZUNlbGwoaW50IGluZGV4LCBSZWdpc3RlcklEIHBheWxvYWQsIGJvb2wgaW5kZXhJc0Nl
bGwpCit7CisgICAgc3RvcmUzMihwYXlsb2FkLCBwYXlsb2FkRm9yKGluZGV4LCBjYWxsRnJhbWVS
ZWdpc3RlcikpOworICAgIGlmICghaW5kZXhJc0NlbGwpCisgICAgICAgIHN0b3JlMzIoVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCB0YWdGb3IoaW5kZXgsIGNhbGxGcmFtZVJlZ2lzdGVy
KSk7Cit9CisKK2lubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlQm9vbChpbnQgaW5kZXgsIFJlZ2lz
dGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzQm9vbCkKK3sKKyAgICBzdG9yZTMyKHBheWxvYWQs
IHBheWxvYWRGb3IoaW5kZXgsIGNhbGxGcmFtZVJlZ2lzdGVyKSk7CisgICAgaWYgKCFpbmRleElz
Qm9vbCkKKyAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qm9vbGVhblRhZyks
IHRhZ0ZvcihpbmRleCwgY2FsbEZyYW1lUmVnaXN0ZXIpKTsKK30KKworaW5saW5lIHZvaWQgSklU
OjplbWl0U3RvcmVEb3VibGUoaW50IGluZGV4LCBGUFJlZ2lzdGVySUQgdmFsdWUpCit7CisgICAg
c3RvcmVEb3VibGUodmFsdWUsIGFkZHJlc3NGb3IoaW5kZXgpKTsKK30KKworaW5saW5lIHZvaWQg
SklUOjplbWl0U3RvcmUoaW50IGluZGV4LCBjb25zdCBKU1ZhbHVlIGNvbnN0YW50LCBSZWdpc3Rl
cklEIGJhc2UpCit7CisgICAgc3RvcmUzMihJbW0zMihjb25zdGFudC5wYXlsb2FkKCkpLCBwYXls
b2FkRm9yKGluZGV4LCBiYXNlKSk7CisgICAgc3RvcmUzMihJbW0zMihjb25zdGFudC50YWcoKSks
IHRhZ0ZvcihpbmRleCwgYmFzZSkpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0
SW5pdFJlZ2lzdGVyKHVuc2lnbmVkIGRzdCkKK3sKKyAgICBlbWl0U3RvcmUoZHN0LCBqc1VuZGVm
aW5lZCgpKTsKK30KKworaW5saW5lIGJvb2wgSklUOjppc0xhYmVsZWQodW5zaWduZWQgYnl0ZWNv
ZGVPZmZzZXQpCit7CisgICAgZm9yIChzaXplX3QgbnVtYmVyT2ZKdW1wVGFyZ2V0cyA9IG1fY29k
ZUJsb2NrLT5udW1iZXJPZkp1bXBUYXJnZXRzKCk7IG1fanVtcFRhcmdldEluZGV4ICE9IG51bWJl
ck9mSnVtcFRhcmdldHM7ICsrbV9qdW1wVGFyZ2V0SW5kZXgpIHsKKyAgICAgICAgdW5zaWduZWQg
anVtcFRhcmdldCA9IG1fY29kZUJsb2NrLT5qdW1wVGFyZ2V0KG1fanVtcFRhcmdldEluZGV4KTsK
KyAgICAgICAgaWYgKGp1bXBUYXJnZXQgPT0gYnl0ZWNvZGVPZmZzZXQpCisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKGp1bXBUYXJnZXQgPiBieXRlY29kZU9mZnNldCkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitp
bmxpbmUgdm9pZCBKSVQ6Om1hcCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgaW50IHZpcnR1YWxS
ZWdpc3RlckluZGV4LCBSZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJRCBwYXlsb2FkKQoreworICAg
IGlmIChpc0xhYmVsZWQoYnl0ZWNvZGVPZmZzZXQpKQorICAgICAgICByZXR1cm47CisKKyAgICBt
X21hcHBlZEJ5dGVjb2RlT2Zmc2V0ID0gYnl0ZWNvZGVPZmZzZXQ7CisgICAgbV9tYXBwZWRWaXJ0
dWFsUmVnaXN0ZXJJbmRleCA9IHZpcnR1YWxSZWdpc3RlckluZGV4OworICAgIG1fbWFwcGVkVGFn
ID0gdGFnOworICAgIG1fbWFwcGVkUGF5bG9hZCA9IHBheWxvYWQ7CisgICAgCisgICAgQVNTRVJU
KCFjYW5CZU9wdGltaXplZCgpIHx8IG1fbWFwcGVkUGF5bG9hZCA9PSByZWdUMCk7CisgICAgQVNT
RVJUKCFjYW5CZU9wdGltaXplZCgpIHx8IG1fbWFwcGVkVGFnID09IHJlZ1QxKTsKK30KKworaW5s
aW5lIHZvaWQgSklUOjp1bm1hcChSZWdpc3RlcklEIHJlZ2lzdGVySUQpCit7CisgICAgaWYgKG1f
bWFwcGVkVGFnID09IHJlZ2lzdGVySUQpCisgICAgICAgIG1fbWFwcGVkVGFnID0gKFJlZ2lzdGVy
SUQpLTE7CisgICAgZWxzZSBpZiAobV9tYXBwZWRQYXlsb2FkID09IHJlZ2lzdGVySUQpCisgICAg
ICAgIG1fbWFwcGVkUGF5bG9hZCA9IChSZWdpc3RlcklEKS0xOworfQorCitpbmxpbmUgdm9pZCBK
SVQ6OnVubWFwKCkKK3sKKyAgICBtX21hcHBlZEJ5dGVjb2RlT2Zmc2V0ID0gKHVuc2lnbmVkKS0x
OworICAgIG1fbWFwcGVkVmlydHVhbFJlZ2lzdGVySW5kZXggPSBKU1N0YWNrOjpSZXR1cm5QQzsK
KyAgICBtX21hcHBlZFRhZyA9IChSZWdpc3RlcklEKS0xOworICAgIG1fbWFwcGVkUGF5bG9hZCA9
IChSZWdpc3RlcklEKS0xOworfQorCitpbmxpbmUgYm9vbCBKSVQ6OmlzTWFwcGVkKGludCB2aXJ0
dWFsUmVnaXN0ZXJJbmRleCkKK3sKKyAgICBpZiAobV9tYXBwZWRCeXRlY29kZU9mZnNldCAhPSBt
X2J5dGVjb2RlT2Zmc2V0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fbWFwcGVk
VmlydHVhbFJlZ2lzdGVySW5kZXggIT0gdmlydHVhbFJlZ2lzdGVySW5kZXgpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworaW5saW5lIGJvb2wgSklUOjpnZXRN
YXBwZWRQYXlsb2FkKGludCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCwgUmVnaXN0ZXJJRCYgcGF5bG9h
ZCkKK3sKKyAgICBpZiAobV9tYXBwZWRCeXRlY29kZU9mZnNldCAhPSBtX2J5dGVjb2RlT2Zmc2V0
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fbWFwcGVkVmlydHVhbFJlZ2lzdGVy
SW5kZXggIT0gdmlydHVhbFJlZ2lzdGVySW5kZXgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBpZiAobV9tYXBwZWRQYXlsb2FkID09IChSZWdpc3RlcklEKS0xKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgcGF5bG9hZCA9IG1fbWFwcGVkUGF5bG9hZDsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworaW5saW5lIGJvb2wgSklUOjpnZXRNYXBwZWRUYWcoaW50IHZpcnR1YWxSZWdpc3Rlcklu
ZGV4LCBSZWdpc3RlcklEJiB0YWcpCit7CisgICAgaWYgKG1fbWFwcGVkQnl0ZWNvZGVPZmZzZXQg
IT0gbV9ieXRlY29kZU9mZnNldCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX21h
cHBlZFZpcnR1YWxSZWdpc3RlckluZGV4ICE9IHZpcnR1YWxSZWdpc3RlckluZGV4KQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fbWFwcGVkVGFnID09IChSZWdpc3RlcklEKS0xKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgdGFnID0gbV9tYXBwZWRUYWc7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2lubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KGludCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCkKK3sKKyAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tu
b3duTm90SW1tZWRpYXRlKHZpcnR1YWxSZWdpc3RlckluZGV4KSkgeworICAgICAgICBpZiAobV9j
b2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHZpcnR1YWxSZWdpc3RlckluZGV4KSkK
KyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIGFkZFNsb3dDYXNlKGVtaXRKdW1wSWZOb3RKU0NlbGwodmlydHVhbFJlZ2lzdGVySW5kZXgp
KTsKKyAgICB9Cit9CisKK2lubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKGludCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCwgUmVnaXN0ZXJJRCB0YWcpCit7CisgICAgaWYg
KCFtX2NvZGVCbG9jay0+aXNLbm93bk5vdEltbWVkaWF0ZSh2aXJ0dWFsUmVnaXN0ZXJJbmRleCkp
IHsKKyAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleCh2aXJ0
dWFsUmVnaXN0ZXJJbmRleCkpCisgICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgdGFn
LCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpKTsKKyAgICB9Cit9CisKK0FMV0FZU19J
TkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50SW1tZWRpYXRlSW50KHVuc2lnbmVkIHNy
YykKK3sKKyAgICByZXR1cm4gbV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHNy
YykgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOworfQorCitBTFdBWVNfSU5M
SU5FIGJvb2wgSklUOjpnZXRPcGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVJbnQodW5zaWduZWQgb3Ax
LCB1bnNpZ25lZCBvcDIsIHVuc2lnbmVkJiBvcCwgaW50MzJfdCYgY29uc3RhbnQpCit7CisgICAg
aWYgKGlzT3BlcmFuZENvbnN0YW50SW1tZWRpYXRlSW50KG9wMSkpIHsKKyAgICAgICAgY29uc3Rh
bnQgPSBnZXRDb25zdGFudE9wZXJhbmQob3AxKS5hc0ludDMyKCk7CisgICAgICAgIG9wID0gb3Ay
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoaXNPcGVyYW5kQ29uc3Rh
bnRJbW1lZGlhdGVJbnQob3AyKSkgeworICAgICAgICBjb25zdGFudCA9IGdldENvbnN0YW50T3Bl
cmFuZChvcDIpLmFzSW50MzIoKTsKKyAgICAgICAgb3AgPSBvcDE7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKyNlbHNlIC8vIFVTRShK
U1ZBTFVFMzJfNjQpCisKKy8qIERlcHJlY2F0ZWQ6IFBsZWFzZSB1c2UgSklUU3R1YkNhbGwgaW5z
dGVhZC4gKi8KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldEpJVFN0dWJBcmcodW5z
aWduZWQgYXJndW1lbnROdW1iZXIsIFJlZ2lzdGVySUQgZHN0KQoreworICAgIHVuc2lnbmVkIGFy
Z3VtZW50U3RhY2tPZmZzZXQgPSAoYXJndW1lbnROdW1iZXIgKiAoc2l6ZW9mKEpTVmFsdWUpIC8g
c2l6ZW9mKHZvaWQqKSkpICsgSklUU1RBQ0tGUkFNRV9BUkdTX0lOREVYOworICAgIHBlZWs2NChk
c3QsIGFyZ3VtZW50U3RhY2tPZmZzZXQpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpr
aWxsTGFzdFJlc3VsdFJlZ2lzdGVyKCkKK3sKKyAgICBtX2xhc3RSZXN1bHRCeXRlY29kZVJlZ2lz
dGVyID0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKTsKK30KKworLy8gZ2V0IGFyZyBw
dXRzIGFuIGFyZyBmcm9tIHRoZSBTRiByZWdpc3RlciBhcnJheSBpbnRvIGEgaC93IHJlZ2lzdGVy
CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGludCBzcmMs
IFJlZ2lzdGVySUQgZHN0KQoreworICAgIEFTU0VSVChtX2J5dGVjb2RlT2Zmc2V0ICE9ICh1bnNp
Z25lZCktMSk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90
L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVPZmZzZXQgaXMgc2V0Lgor
CisgICAgLy8gVE9ETzogd2Ugd2FudCB0byByZXVzZSB2YWx1ZXMgdGhhdCBhcmUgYWxyZWFkeSBp
biByZWdpc3RlcnMgaWYgd2UgY2FuIC0gYWRkIGEgcmVnaXN0ZXIgYWxsb2NhdG9yIQorICAgIGlm
IChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoc3JjKSkgeworICAgICAgICBK
U1ZhbHVlIHZhbHVlID0gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CisgICAgICAgIGlm
ICghdmFsdWUuaXNOdW1iZXIoKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFs
dWU6OmVuY29kZSh2YWx1ZSkpLCBkc3QpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtb3Zl
KEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBkc3QpOworICAgICAgICBraWxsTGFzdFJl
c3VsdFJlZ2lzdGVyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoc3JjID09
IG1fbGFzdFJlc3VsdEJ5dGVjb2RlUmVnaXN0ZXIgJiYgbV9jb2RlQmxvY2stPmlzVGVtcG9yYXJ5
UmVnaXN0ZXJJbmRleChzcmMpICYmICFhdEp1bXBUYXJnZXQoKSkgeworICAgICAgICAvLyBUaGUg
YXJndW1lbnQgd2Ugd2FudCBpcyBhbHJlYWR5IHN0b3JlZCBpbiBlYXgKKyAgICAgICAgaWYgKGRz
dCAhPSBjYWNoZWRSZXN1bHRSZWdpc3RlcikKKyAgICAgICAgICAgIG1vdmUoY2FjaGVkUmVzdWx0
UmVnaXN0ZXIsIGRzdCk7CisgICAgICAgIGtpbGxMYXN0UmVzdWx0UmVnaXN0ZXIoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGxvYWQ2NChBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVy
LCBzcmMgKiBzaXplb2YoUmVnaXN0ZXIpKSwgZHN0KTsKKyAgICBraWxsTGFzdFJlc3VsdFJlZ2lz
dGVyKCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXJzKGludCBzcmMxLCBSZWdpc3RlcklEIGRzdDEsIGludCBzcmMyLCBSZWdpc3RlcklEIGRzdDIp
Cit7CisgICAgaWYgKHNyYzIgPT0gbV9sYXN0UmVzdWx0Qnl0ZWNvZGVSZWdpc3RlcikgeworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzIsIGRzdDIpOworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNyYzEsIGRzdDEpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgZHN0MSk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc3JjMiwgZHN0Mik7CisgICAgfQorfQorCitBTFdBWVNfSU5MSU5FIGludDMyX3QgSklU
OjpnZXRDb25zdGFudE9wZXJhbmRJbW1lZGlhdGVJbnQodW5zaWduZWQgc3JjKQoreworICAgIHJl
dHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5hc0ludDMyKCk7Cit9CisKK0FMV0FZU19JTkxJ
TkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50SW1tZWRpYXRlSW50KHVuc2lnbmVkIHNyYykK
K3sKKyAgICByZXR1cm4gbV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHNyYykg
JiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOworfQorCitBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHVuc2lnbmVkIGRzdCwgUmVnaXN0ZXJJ
RCBmcm9tKQoreworICAgIHN0b3JlNjQoZnJvbSwgQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rlciwg
ZHN0ICogc2l6ZW9mKFJlZ2lzdGVyKSkpOworICAgIG1fbGFzdFJlc3VsdEJ5dGVjb2RlUmVnaXN0
ZXIgPSAoZnJvbSA9PSBjYWNoZWRSZXN1bHRSZWdpc3RlcikgPyBzdGF0aWNfY2FzdDxpbnQ+KGRz
dCkgOiBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpOworfQorCitBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjplbWl0SW5pdFJlZ2lzdGVyKHVuc2lnbmVkIGRzdCkKK3sKKyAgICBzdG9yZTY0
KFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpLCBBZGRyZXNzKGNh
bGxGcmFtZVJlZ2lzdGVyLCBkc3QgKiBzaXplb2YoUmVnaXN0ZXIpKSk7Cit9CisKK0FMV0FZU19J
TkxJTkUgSklUOjpKdW1wIEpJVDo6ZW1pdEp1bXBJZkpTQ2VsbChSZWdpc3RlcklEIHJlZykKK3sK
KyAgICByZXR1cm4gYnJhbmNoVGVzdDY0KFplcm8sIHJlZywgdGFnTWFza1JlZ2lzdGVyKTsKK30K
KworQUxXQVlTX0lOTElORSBKSVQ6Okp1bXAgSklUOjplbWl0SnVtcElmQm90aEpTQ2VsbHMoUmVn
aXN0ZXJJRCByZWcxLCBSZWdpc3RlcklEIHJlZzIsIFJlZ2lzdGVySUQgc2NyYXRjaCkKK3sKKyAg
ICBtb3ZlKHJlZzEsIHNjcmF0Y2gpOworICAgIG9yNjQocmVnMiwgc2NyYXRjaCk7CisgICAgcmV0
dXJuIGVtaXRKdW1wSWZKU0NlbGwoc2NyYXRjaCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZkpTQ2VsbChSZWdpc3RlcklEIHJlZykKK3sKKyAgICBhZGRT
bG93Q2FzZShlbWl0SnVtcElmSlNDZWxsKHJlZykpOworfQorCitBTFdBWVNfSU5MSU5FIEpJVDo6
SnVtcCBKSVQ6OmVtaXRKdW1wSWZOb3RKU0NlbGwoUmVnaXN0ZXJJRCByZWcpCit7CisgICAgcmV0
dXJuIGJyYW5jaFRlc3Q2NChOb25aZXJvLCByZWcsIHRhZ01hc2tSZWdpc3Rlcik7Cit9CisKK0FM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChSZWdpc3Rl
cklEIHJlZykKK3sKKyAgICBhZGRTbG93Q2FzZShlbWl0SnVtcElmTm90SlNDZWxsKHJlZykpOwor
fQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
UmVnaXN0ZXJJRCByZWcsIGludCB2UmVnKQoreworICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25v
d25Ob3RJbW1lZGlhdGUodlJlZykpCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChyZWcpOworfQorCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkRG91YmxlKGludCBpbmRleCwg
RlBSZWdpc3RlcklEIHZhbHVlKQoreworICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJl
Z2lzdGVySW5kZXgoaW5kZXgpKSB7CisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgaW5D
b25zdGFudFBvb2wgPSBtX2NvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihpbmRleCk7CisgICAg
ICAgIGxvYWREb3VibGUoJmluQ29uc3RhbnRQb29sLCB2YWx1ZSk7CisgICAgfSBlbHNlCisgICAg
ICAgIGxvYWREb3VibGUoYWRkcmVzc0ZvcihpbmRleCksIHZhbHVlKTsKK30KKworaW5saW5lIHZv
aWQgSklUOjplbWl0TG9hZEludDMyVG9Eb3VibGUoaW50IGluZGV4LCBGUFJlZ2lzdGVySUQgdmFs
dWUpCit7CisgICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbmRl
eCkpIHsKKyAgICAgICAgQVNTRVJUKGlzT3BlcmFuZENvbnN0YW50SW1tZWRpYXRlSW50KGluZGV4
KSk7CisgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKEltbTMyKGdldENvbnN0YW50T3BlcmFu
ZChpbmRleCkuYXNJbnQzMigpKSwgdmFsdWUpOworICAgIH0gZWxzZQorICAgICAgICBjb252ZXJ0
SW50MzJUb0RvdWJsZShhZGRyZXNzRm9yKGluZGV4KSwgdmFsdWUpOworfQorCitBTFdBWVNfSU5M
SU5FIEpJVDo6SnVtcCBKSVQ6OmVtaXRKdW1wSWZJbW1lZGlhdGVJbnRlZ2VyKFJlZ2lzdGVySUQg
cmVnKQoreworICAgIHJldHVybiBicmFuY2g2NChBYm92ZU9yRXF1YWwsIHJlZywgdGFnVHlwZU51
bWJlclJlZ2lzdGVyKTsKK30KKworQUxXQVlTX0lOTElORSBKSVQ6Okp1bXAgSklUOjplbWl0SnVt
cElmTm90SW1tZWRpYXRlSW50ZWdlcihSZWdpc3RlcklEIHJlZykKK3sKKyAgICByZXR1cm4gYnJh
bmNoNjQoQmVsb3csIHJlZywgdGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKK30KKworQUxXQVlTX0lO
TElORSBKSVQ6Okp1bXAgSklUOjplbWl0SnVtcElmTm90SW1tZWRpYXRlSW50ZWdlcnMoUmVnaXN0
ZXJJRCByZWcxLCBSZWdpc3RlcklEIHJlZzIsIFJlZ2lzdGVySUQgc2NyYXRjaCkKK3sKKyAgICBt
b3ZlKHJlZzEsIHNjcmF0Y2gpOworICAgIGFuZDY0KHJlZzIsIHNjcmF0Y2gpOworICAgIHJldHVy
biBlbWl0SnVtcElmTm90SW1tZWRpYXRlSW50ZWdlcihzY3JhdGNoKTsKK30KKworQUxXQVlTX0lO
TElORSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tZWRpYXRlSW50ZWdlcihSZWdp
c3RlcklEIHJlZykKK3sKKyAgICBhZGRTbG93Q2FzZShlbWl0SnVtcElmTm90SW1tZWRpYXRlSW50
ZWdlcihyZWcpKTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SW1tZWRpYXRlSW50ZWdlcnMoUmVnaXN0ZXJJRCByZWcxLCBSZWdpc3RlcklEIHJlZzIs
IFJlZ2lzdGVySUQgc2NyYXRjaCkKK3sKKyAgICBhZGRTbG93Q2FzZShlbWl0SnVtcElmTm90SW1t
ZWRpYXRlSW50ZWdlcnMocmVnMSwgcmVnMiwgc2NyYXRjaCkpOworfQorCitBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1lZGlhdGVOdW1iZXIoUmVnaXN0ZXJJ
RCByZWcpCit7CisgICAgYWRkU2xvd0Nhc2UoZW1pdEp1bXBJZk5vdEltbWVkaWF0ZU51bWJlcihy
ZWcpKTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEZhc3RBcml0aFJlVGFnSW1t
ZWRpYXRlKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCit7CisgICAgZW1pdEZhc3RB
cml0aEludFRvSW1tTm9DaGVjayhzcmMsIGRlc3QpOworfQorCisvLyBvcGVyYW5kIGlzIGludDMy
X3QsIG11c3QgaGF2ZSBiZWVuIHplcm8tZXh0ZW5kZWQgaWYgcmVnaXN0ZXIgaXMgNjQtYml0Lgor
QUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEZhc3RBcml0aEludFRvSW1tTm9DaGVjayhSZWdp
c3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQoreworICAgIGlmIChzcmMgIT0gZGVzdCkKKyAg
ICAgICAgbW92ZShzcmMsIGRlc3QpOworICAgIG9yNjQodGFnVHlwZU51bWJlclJlZ2lzdGVyLCBk
ZXN0KTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFRhZ0FzQm9vbEltbWVkaWF0
ZShSZWdpc3RlcklEIHJlZykKK3sKKyAgICBvcjMyKFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxp
bnQzMl90PihWYWx1ZUZhbHNlKSksIHJlZyk7Cit9CisKKyNlbmRpZiAvLyBVU0UoSlNWQUxVRTMy
XzY0KQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShKSVQpCisKKyNl
bmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHJldmlzaW9u
IDEzMzk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMyw4ICsyMyw4IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZu
ZGVmIEpJVElubGluZU1ldGhvZHNfaAotI2RlZmluZSBKSVRJbmxpbmVNZXRob2RzX2gKKyNpZm5k
ZWYgSklUSW5saW5lc19oCisjZGVmaW5lIEpJVElubGluZXNfaAogCiAKICNpZiBFTkFCTEUoSklU
KQpAQCAtMTAwNCw0ICsxMDA0LDUgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFRhZ0Fz
Qm9vbEltbQogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIAotI2VuZGlmCisjZW5kaWYgLy8gSklU
SW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMy
XzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29k
ZXMzMl82NC5jcHAJKHJldmlzaW9uIDEzMzk3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3Bjb2RlczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAog
I2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAjaW5jbHVkZSAiSklULmgiCiAKLSNpbmNsdWRlICJKSVRJ
bmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiSklUSW5saW5lcy5oIgogI2luY2x1ZGUgIkpJVFN0
dWJDYWxsLmgiCiAjaW5jbHVkZSAiSlNBcnJheS5oIgogI2luY2x1ZGUgIkpTQ2VsbC5oIgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAxMzM5
NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yOSw5ICsyOSw5IEBACiAjaW5jbHVkZSAiSklULmgiCiAKICNpbmNsdWRlICJB
cmd1bWVudHMuaCIKLSNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaCIKKyNpbmNs
dWRlICJDb3BpZWRTcGFjZUlubGluZXMuaCIKICNpbmNsdWRlICJIZWFwLmgiCi0jaW5jbHVkZSAi
SklUSW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkpJVElubGluZXMuaCIKICNpbmNsdWRlICJK
SVRTdHViQ2FsbC5oIgogI2luY2x1ZGUgIkpTQXJyYXkuaCIKICNpbmNsdWRlICJKU0NlbGwuaCIK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFj
Y2VzczMyXzY0LmNwcAkocmV2aXNpb24gMTMzOTczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyAr
MzIsNyBAQAogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkdDQXdhcmVKSVRTdHVi
Um91dGluZS5oIgogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCi0jaW5jbHVkZSAiSklUSW5saW5l
TWV0aG9kcy5oIgorI2luY2x1ZGUgIkpJVElubGluZXMuaCIKICNpbmNsdWRlICJKSVRTdHViQ2Fs
bC5oIgogI2luY2x1ZGUgIkpTQXJyYXkuaCIKICNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAko
cmV2aXNpb24gMTMzOTczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0
eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlICJH
Q0F3YXJlSklUU3R1YlJvdXRpbmUuaCIKICNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKICNpbmNs
dWRlICJJbnRlcnByZXRlci5oIgotI2luY2x1ZGUgIkpJVElubGluZU1ldGhvZHMuaCIKKyNpbmNs
dWRlICJKSVRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSklUU3R1YkNhbGwuaCIKICNpbmNsdWRlICJK
U0FycmF5LmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQXJyYXlDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDEz
Mzk3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5Q29uc3RydWN0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw4ICsyNSw4IEBACiAjaW5jbHVkZSAiQXJyYXlDb25z
dHJ1Y3Rvci5oIgogCiAjaW5jbHVkZSAiQXJyYXlQcm90b3R5cGUuaCIKLSNpbmNsdWRlICJCdXR0
ZXJmbHlJbmxpbmVNZXRob2RzLmgiCi0jaW5jbHVkZSAiQ29waWVkU3BhY2VJbmxpbmVNZXRob2Rz
LmgiCisjaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lcy5oIgorI2luY2x1ZGUgIkNvcGllZFNwYWNl
SW5saW5lcy5oIgogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uSGVscGVy
cy5oIgogI2luY2x1ZGUgIkpTQXJyYXkuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDEzMzk3MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjQsMTAgKzI0LDEwIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
QXJyYXlQcm90b3R5cGUuaCIKIAotI2luY2x1ZGUgIkJ1dHRlcmZseUlubGluZU1ldGhvZHMuaCIK
KyNpbmNsdWRlICJCdXR0ZXJmbHlJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ2FjaGVkQ2FsbC5oIgog
I2luY2x1ZGUgIkNvZGVCbG9jay5oIgotI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lTWV0aG9k
cy5oIgorI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lcy5oIgogI2luY2x1ZGUgIkludGVycHJl
dGVyLmgiCiAjaW5jbHVkZSAiSklULmgiCiAjaW5jbHVkZSAiSlNTdHJpbmdCdWlsZGVyLmgiCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVNZXRob2Rz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5
SW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAxMzM5NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
MTgwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8K
LQotI2lmbmRlZiBCdXR0ZXJmbHlJbmxpbmVNZXRob2RzX2gKLSNkZWZpbmUgQnV0dGVyZmx5SW5s
aW5lTWV0aG9kc19oCi0KLSNpbmNsdWRlICJBcnJheVN0b3JhZ2UuaCIKLSNpbmNsdWRlICJCdXR0
ZXJmbHkuaCIKLSNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaCIKLSNpbmNsdWRl
ICJDb3B5VmlzaXRvci5oIgotI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgotI2luY2x1ZGUgIlN0
cnVjdHVyZS5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotaW5saW5lIEJ1dHRlcmZseSogQnV0dGVy
Zmx5OjpjcmVhdGVVbmluaXRpYWxpemVkKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90
IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRleGluZ0hl
YWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQotewotICAgIHZvaWQqIHRl
bXA7Ci0gICAgc2l6ZV90IHNpemUgPSB0b3RhbFNpemUocHJlQ2FwYWNpdHksIHByb3BlcnR5Q2Fw
YWNpdHksIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Ci0g
ICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKHNpemUsICZ0ZW1wKSkK
LSAgICAgICAgQ1JBU0goKTsKLSAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IGZyb21CYXNlKHRlbXAs
IHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5KTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQot
Ci1pbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wg
aGFzSW5kZXhpbmdIZWFkZXIsIGNvbnN0IEluZGV4aW5nSGVhZGVyJiBpbmRleGluZ0hlYWRlciwg
c2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQotewotICAgIEJ1dHRlcmZseSogcmVz
dWx0ID0gY3JlYXRlVW5pbml0aWFsaXplZCgKLSAgICAgICAgZ2xvYmFsRGF0YSwgcHJlQ2FwYWNp
dHksIHByb3BlcnR5Q2FwYWNpdHksIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRT
aXplSW5CeXRlcyk7Ci0gICAgaWYgKGhhc0luZGV4aW5nSGVhZGVyKQotICAgICAgICAqcmVzdWx0
LT5pbmRleGluZ0hlYWRlcigpID0gaW5kZXhpbmdIZWFkZXI7Ci0gICAgcmV0dXJuIHJlc3VsdDsK
LX0KLQotaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGUoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLXsKLSAgICByZXR1cm4gY3JlYXRlKGds
b2JhbERhdGEsIDAsIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgaGFzSW5kZXhpbmdI
ZWFkZXIoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSksIEluZGV4aW5nSGVhZGVyKCksIDApOwot
fQotCi1pbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWREdXJp
bmdDb2xsZWN0aW9uKENvcHlWaXNpdG9yJiB2aXNpdG9yLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNp
emVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5k
ZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCi17Ci0gICAgc2l6ZV90IHNpemUgPSB0b3RhbFNpemUo
cHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHksIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGlu
Z1BheWxvYWRTaXplSW5CeXRlcyk7Ci0gICAgQnV0dGVyZmx5KiByZXN1bHQgPSBmcm9tQmFzZSgK
LSAgICAgICAgdmlzaXRvci5hbGxvY2F0ZU5ld1NwYWNlKHNpemUpLAotICAgICAgICBwcmVDYXBh
Y2l0eSwgcHJvcGVydHlDYXBhY2l0eSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotaW5saW5l
IHZvaWQqIEJ1dHRlcmZseTo6YmFzZShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLXsKLSAgICByZXR1
cm4gYmFzZShpbmRleGluZ0hlYWRlcigpLT5wcmVDYXBhY2l0eShzdHJ1Y3R1cmUpLCBzdHJ1Y3R1
cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOwotfQotCi1pbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJm
bHk6Omdyb3dQcm9wZXJ0eVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3Qg
cHJlQ2FwYWNpdHksIHNpemVfdCBvbGRQcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5n
SGVhZGVyLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdQcm9w
ZXJ0eUNhcGFjaXR5KQotewotICAgIEFTU0VSVChuZXdQcm9wZXJ0eUNhcGFjaXR5ID4gb2xkUHJv
cGVydHlDYXBhY2l0eSk7Ci0gICAgQnV0dGVyZmx5KiByZXN1bHQgPSBjcmVhdGVVbmluaXRpYWxp
emVkKAotICAgICAgICBnbG9iYWxEYXRhLCBwcmVDYXBhY2l0eSwgbmV3UHJvcGVydHlDYXBhY2l0
eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKLSAgICBt
ZW1jcHkoCi0gICAgICAgIHJlc3VsdC0+cHJvcGVydHlTdG9yYWdlKCkgLSBvbGRQcm9wZXJ0eUNh
cGFjaXR5LAotICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UoKSAtIG9sZFByb3BlcnR5Q2FwYWNpdHks
Ci0gICAgICAgIHRvdGFsU2l6ZSgwLCBvbGRQcm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hl
YWRlciwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpKTsKLSAgICByZXR1cm4gcmVzdWx0Owot
fQotCi1pbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6Omdyb3dQcm9wZXJ0eVN0b3JhZ2UoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IG9sZFBy
b3BlcnR5Q2FwYWNpdHksIHNpemVfdCBuZXdQcm9wZXJ0eUNhcGFjaXR5KQotewotICAgIHJldHVy
biBncm93UHJvcGVydHlTdG9yYWdlKAotICAgICAgICBnbG9iYWxEYXRhLCBpbmRleGluZ0hlYWRl
cigpLT5wcmVDYXBhY2l0eShzdHJ1Y3R1cmUpLCBvbGRQcm9wZXJ0eUNhcGFjaXR5LAotICAgICAg
ICBoYXNJbmRleGluZ0hlYWRlcihzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSwKLSAgICAgICAg
aW5kZXhpbmdIZWFkZXIoKS0+aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMoc3RydWN0dXJlKSwg
bmV3UHJvcGVydHlDYXBhY2l0eSk7Ci19Ci0KLWlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6
Z3Jvd1Byb3BlcnR5U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSog
b2xkU3RydWN0dXJlLCBzaXplX3QgbmV3UHJvcGVydHlDYXBhY2l0eSkKLXsKLSAgICByZXR1cm4g
Z3Jvd1Byb3BlcnR5U3RvcmFnZSgKLSAgICAgICAgZ2xvYmFsRGF0YSwgb2xkU3RydWN0dXJlLCBv
bGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCksIG5ld1Byb3BlcnR5Q2FwYWNpdHkpOwot
fQotCi1pbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6Omdyb3dBcnJheVJpZ2h0KEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIHNpemVfdCBwcm9wZXJ0
eUNhcGFjaXR5LCBib29sIGhhZEluZGV4aW5nSGVhZGVyLCBzaXplX3Qgb2xkSW5kZXhpbmdQYXls
b2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKLXsK
LSAgICBBU1NFUlRfVU5VU0VEKG9sZFN0cnVjdHVyZSwgIWluZGV4aW5nSGVhZGVyKCktPnByZUNh
cGFjaXR5KG9sZFN0cnVjdHVyZSkpOwotICAgIEFTU0VSVF9VTlVTRUQob2xkU3RydWN0dXJlLCBo
YWRJbmRleGluZ0hlYWRlciA9PSBoYXNJbmRleGluZ0hlYWRlcihvbGRTdHJ1Y3R1cmUtPmluZGV4
aW5nVHlwZSgpKSk7Ci0gICAgdm9pZCogdGhlQmFzZSA9IGJhc2UoMCwgcHJvcGVydHlDYXBhY2l0
eSk7Ci0gICAgc2l6ZV90IG9sZFNpemUgPSB0b3RhbFNpemUoMCwgcHJvcGVydHlDYXBhY2l0eSwg
aGFkSW5kZXhpbmdIZWFkZXIsIG9sZEluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKLSAgICBz
aXplX3QgbmV3U2l6ZSA9IHRvdGFsU2l6ZSgwLCBwcm9wZXJ0eUNhcGFjaXR5LCB0cnVlLCBuZXdJ
bmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Ci0gICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5
UmVhbGxvY2F0ZVN0b3JhZ2UoJnRoZUJhc2UsIG9sZFNpemUsIG5ld1NpemUpKQotICAgICAgICBy
ZXR1cm4gMDsKLSAgICByZXR1cm4gZnJvbUJhc2UodGhlQmFzZSwgMCwgcHJvcGVydHlDYXBhY2l0
eSk7Ci19Ci0KLWlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Z3Jvd0FycmF5UmlnaHQoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgc2l6ZV90IG5l
d0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQotewotICAgIHJldHVybiBncm93QXJyYXlSaWdo
dCgKLSAgICAgICAgZ2xvYmFsRGF0YSwgb2xkU3RydWN0dXJlLCBvbGRTdHJ1Y3R1cmUtPm91dE9m
TGluZUNhcGFjaXR5KCksCi0gICAgICAgIGhhc0luZGV4aW5nSGVhZGVyKG9sZFN0cnVjdHVyZS0+
aW5kZXhpbmdUeXBlKCkpLAotICAgICAgICBpbmRleGluZ0hlYWRlcigpLT5pbmRleGluZ1BheWxv
YWRTaXplSW5CeXRlcyhvbGRTdHJ1Y3R1cmUpLCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRl
cyk7Ci19Ci0KLWlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6cmVzaXplQXJyYXkoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBvbGRIYXNJ
bmRleGluZ0hlYWRlciwgc2l6ZV90IG9sZEluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzLCBzaXpl
X3QgbmV3UHJlQ2FwYWNpdHksIGJvb2wgbmV3SGFzSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBuZXdJ
bmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKLXsKLSAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IGNy
ZWF0ZVVuaW5pdGlhbGl6ZWQoCi0gICAgICAgIGdsb2JhbERhdGEsIG5ld1ByZUNhcGFjaXR5LCBw
cm9wZXJ0eUNhcGFjaXR5LCBuZXdIYXNJbmRleGluZ0hlYWRlciwgbmV3SW5kZXhpbmdQYXlsb2Fk
U2l6ZUluQnl0ZXMpOwotICAgIC8vIEZJWE1FOiBUaGlzIGNvdWxkIGJlIG1hZGUgbXVjaCBtb3Jl
IGVmZmljaWVudCBpZiB3ZSB1c2VkIHRoZSBwcm9wZXJ0eSBzaXplLAotICAgIC8vIG5vdCB0aGUg
Y2FwYWNpdHkuCi0gICAgdm9pZCogdG8gPSByZXN1bHQtPnByb3BlcnR5U3RvcmFnZSgpIC0gcHJv
cGVydHlDYXBhY2l0eTsKLSAgICB2b2lkKiBmcm9tID0gcHJvcGVydHlTdG9yYWdlKCkgLSBwcm9w
ZXJ0eUNhcGFjaXR5OwotICAgIHNpemVfdCBzaXplID0gc3RkOjptaW4oCi0gICAgICAgIHRvdGFs
U2l6ZSgwLCBwcm9wZXJ0eUNhcGFjaXR5LCBvbGRIYXNJbmRleGluZ0hlYWRlciwgb2xkSW5kZXhp
bmdQYXlsb2FkU2l6ZUluQnl0ZXMpLAotICAgICAgICB0b3RhbFNpemUoMCwgcHJvcGVydHlDYXBh
Y2l0eSwgbmV3SGFzSW5kZXhpbmdIZWFkZXIsIG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVz
KSk7Ci0gICAgbWVtY3B5KHRvLCBmcm9tLCBzaXplKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQot
Ci1pbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OnJlc2l6ZUFycmF5KEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBuZXdQcmVDYXBhY2l0eSwg
c2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQotewotICAgIGJvb2wgaGFzSW5k
ZXhpbmdIZWFkZXIgPSBKU0M6Omhhc0luZGV4aW5nSGVhZGVyKHN0cnVjdHVyZS0+aW5kZXhpbmdU
eXBlKCkpOwotICAgIHJldHVybiByZXNpemVBcnJheSgKLSAgICAgICAgZ2xvYmFsRGF0YSwgc3Ry
dWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBoYXNJbmRleGluZ0hlYWRlciwKLSAgICAgICAg
aW5kZXhpbmdIZWFkZXIoKS0+aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMoc3RydWN0dXJlKSwg
bmV3UHJlQ2FwYWNpdHksCi0gICAgICAgIGhhc0luZGV4aW5nSGVhZGVyLCBuZXdJbmRleGluZ1Bh
eWxvYWRTaXplSW5CeXRlcyk7Ci19Ci0KLWlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6dW5z
aGlmdChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IG51bWJlck9mU2xvdHMpCi17Ci0gICAg
QVNTRVJUKGhhc0FycmF5U3RvcmFnZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSk7Ci0gICAg
QVNTRVJUKG51bWJlck9mU2xvdHMgPD0gaW5kZXhpbmdIZWFkZXIoKS0+cHJlQ2FwYWNpdHkoc3Ry
dWN0dXJlKSk7Ci0gICAgdW5zaWduZWQgcHJvcGVydHlDYXBhY2l0eSA9IHN0cnVjdHVyZS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKTsKLSAgICAvLyBGSVhNRTogSXQgd291bGQgcHJvYmFibHkgYmUgd2lz
ZSB0byByZXdyaXRlIHRoaXMgYXMgYSBsb29wIHNpbmNlICgxKSB3ZSBrbm93IGluIHdoaWNoCi0g
ICAgLy8gZGlyZWN0aW9uIHdlJ3JlIG1vdmluZyBtZW1vcnkgc28gd2UgZG9uJ3QgbmVlZCB0aGUg
ZXh0cmEgY2hlY2sgb2YgbWVtbW92ZSBhbmQgKDIpIHdlJ3JlCi0gICAgLy8gbW92aW5nIGEgc21h
bGwgYW1vdW50IG9mIG1lbW9yeSBpbiB0aGUgY29tbW9uIGNhc2Ugc28gdGhlIHRocm91Z2hwdXQg
b2YgbWVtbW92ZSB3b24ndAotICAgIC8vIGFtb3J0aXplIHRoZSBvdmVyaGVhZCBvZiBjYWxsaW5n
IGl0LiBBbmQgbm8sIHdlIGNhbm5vdCByZWx5IG9uIHRoZSBDKysgY29tcGlsZXIgdG8KLSAgICAv
LyBpbmxpbmUgbWVtbW92ZSAocGFydGljdWxhcmx5IHNpbmNlIHRoZSBzaXplIGFyZ3VtZW50IGlz
IGxpa2VseSB0byBiZSB2YXJpYWJsZSksIG5vciBjYW4KLSAgICAvLyB3ZSByZWx5IG9uIHRoZSBj
b21waWxlciB0byByZWNvZ25pemUgdGhlIG9yZGVyaW5nIG9mIHRoZSBwb2ludGVyIGFyZ3VtZW50
cyAoc2luY2UKLSAgICAvLyBwcm9wZXJ0eUNhcGFjaXR5IGlzIHZhcmlhYmxlIGFuZCBjb3VsZCBj
YXVzZSB3cmFwLWFyb3VuZCBhcyBmYXIgYXMgdGhlIGNvbXBpbGVyIGtub3dzKS4KLSAgICBtZW1t
b3ZlKAotICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UoKSAtIG51bWJlck9mU2xvdHMgLSBwcm9wZXJ0
eUNhcGFjaXR5LAotICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5Q2FwYWNpdHks
Ci0gICAgICAgIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiBwcm9wZXJ0eUNhcGFjaXR5ICsgc2l6
ZW9mKEluZGV4aW5nSGVhZGVyKSArIEFycmF5U3RvcmFnZTo6c2l6ZUZvcigwKSk7Ci0gICAgcmV0
dXJuIEluZGV4aW5nSGVhZGVyOjpmcm9tRW5kT2YocHJvcGVydHlTdG9yYWdlKCkgLSBudW1iZXJP
ZlNsb3RzKS0+YnV0dGVyZmx5KCk7Ci19Ci0KLWlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6
c2hpZnQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBudW1iZXJPZlNsb3RzKQotewotICAg
IEFTU0VSVChoYXNBcnJheVN0b3JhZ2Uoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpOwotICAg
IHVuc2lnbmVkIHByb3BlcnR5Q2FwYWNpdHkgPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5
KCk7Ci0gICAgLy8gRklYTUU6IFNlZSBjb21tZW50IGluIHVuc2hpZnQoKSwgYWJvdmUuCi0gICAg
bWVtbW92ZSgKLSAgICAgICAgcHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eUNhcGFjaXR5ICsg
bnVtYmVyT2ZTbG90cywKLSAgICAgICAgcHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eUNhcGFj
aXR5LAotICAgICAgICBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogcHJvcGVydHlDYXBhY2l0eSAr
IHNpemVvZihJbmRleGluZ0hlYWRlcikgKyBBcnJheVN0b3JhZ2U6OnNpemVGb3IoMCkpOwotICAg
IHJldHVybiBJbmRleGluZ0hlYWRlcjo6ZnJvbUVuZE9mKHByb3BlcnR5U3RvcmFnZSgpICsgbnVt
YmVyT2ZTbG90cyktPmJ1dHRlcmZseSgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2Vu
ZGlmIC8vIEJ1dHRlcmZseUlubGluZU1ldGhvZHNfaAotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lcy5oCShyZXZpc2lvbiAxMzM5NTUp
CShmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGluZU1ldGhv
ZHMuaDoxMzM5NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJ
bmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxODAgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCdXR0ZXJmbHlJbmxpbmVN
ZXRob2RzX2gKKyNkZWZpbmUgQnV0dGVyZmx5SW5saW5lTWV0aG9kc19oCisKKyNpbmNsdWRlICJB
cnJheVN0b3JhZ2UuaCIKKyNpbmNsdWRlICJCdXR0ZXJmbHkuaCIKKyNpbmNsdWRlICJDb3BpZWRT
cGFjZUlubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJDb3B5VmlzaXRvci5oIgorI2luY2x1ZGUg
IkpTR2xvYmFsRGF0YS5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgorCituYW1lc3BhY2UgSlND
IHsKKworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxpemVkKEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVy
dHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9h
ZFNpemVJbkJ5dGVzKQoreworICAgIHZvaWQqIHRlbXA7CisgICAgc2l6ZV90IHNpemUgPSB0b3Rh
bFNpemUocHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHksIGhhc0luZGV4aW5nSGVhZGVyLCBp
bmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5
QWxsb2NhdGVTdG9yYWdlKHNpemUsICZ0ZW1wKSkKKyAgICAgICAgQ1JBU0goKTsKKyAgICBCdXR0
ZXJmbHkqIHJlc3VsdCA9IGZyb21CYXNlKHRlbXAsIHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFj
aXR5KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJm
bHk6OmNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNpemVfdCBwcmVDYXBhY2l0eSwg
c2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIsIGNvbnN0IElu
ZGV4aW5nSGVhZGVyJiBpbmRleGluZ0hlYWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJ
bkJ5dGVzKQoreworICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gY3JlYXRlVW5pbml0aWFsaXplZCgK
KyAgICAgICAgZ2xvYmFsRGF0YSwgcHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHksIGhhc0lu
ZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgaWYgKGhhc0lu
ZGV4aW5nSGVhZGVyKQorICAgICAgICAqcmVzdWx0LT5pbmRleGluZ0hlYWRlcigpID0gaW5kZXhp
bmdIZWFkZXI7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5lIEJ1dHRlcmZseSogQnV0
dGVyZmx5OjpjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkKK3sKKyAgICByZXR1cm4gY3JlYXRlKGdsb2JhbERhdGEsIDAsIHN0cnVjdHVyZS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKSwgaGFzSW5kZXhpbmdIZWFkZXIoc3RydWN0dXJlLT5pbmRleGluZ1R5
cGUoKSksIEluZGV4aW5nSGVhZGVyKCksIDApOworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0
ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWREdXJpbmdDb2xsZWN0aW9uKENvcHlWaXNpdG9yJiB2
aXNpdG9yLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29s
IGhhc0luZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCit7
CisgICAgc2l6ZV90IHNpemUgPSB0b3RhbFNpemUocHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNp
dHksIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAg
QnV0dGVyZmx5KiByZXN1bHQgPSBmcm9tQmFzZSgKKyAgICAgICAgdmlzaXRvci5hbGxvY2F0ZU5l
d1NwYWNlKHNpemUpLAorICAgICAgICBwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5lIHZvaWQqIEJ1dHRlcmZseTo6YmFzZShTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICByZXR1cm4gYmFzZShpbmRleGluZ0hlYWRlcigpLT5w
cmVDYXBhY2l0eShzdHJ1Y3R1cmUpLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOwor
fQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6Omdyb3dQcm9wZXJ0eVN0b3JhZ2UoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBvbGRQcm9w
ZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5kZXhpbmdQYXls
b2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdQcm9wZXJ0eUNhcGFjaXR5KQoreworICAgIEFTU0VS
VChuZXdQcm9wZXJ0eUNhcGFjaXR5ID4gb2xkUHJvcGVydHlDYXBhY2l0eSk7CisgICAgQnV0dGVy
Zmx5KiByZXN1bHQgPSBjcmVhdGVVbmluaXRpYWxpemVkKAorICAgICAgICBnbG9iYWxEYXRhLCBw
cmVDYXBhY2l0eSwgbmV3UHJvcGVydHlDYXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4
aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBtZW1jcHkoCisgICAgICAgIHJlc3VsdC0+cHJv
cGVydHlTdG9yYWdlKCkgLSBvbGRQcm9wZXJ0eUNhcGFjaXR5LAorICAgICAgICBwcm9wZXJ0eVN0
b3JhZ2UoKSAtIG9sZFByb3BlcnR5Q2FwYWNpdHksCisgICAgICAgIHRvdGFsU2l6ZSgwLCBvbGRQ
cm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hlYWRlciwgaW5kZXhpbmdQYXlsb2FkU2l6ZUlu
Qnl0ZXMpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0
ZXJmbHk6Omdyb3dQcm9wZXJ0eVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IG9sZFByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBuZXdQ
cm9wZXJ0eUNhcGFjaXR5KQoreworICAgIHJldHVybiBncm93UHJvcGVydHlTdG9yYWdlKAorICAg
ICAgICBnbG9iYWxEYXRhLCBpbmRleGluZ0hlYWRlcigpLT5wcmVDYXBhY2l0eShzdHJ1Y3R1cmUp
LCBvbGRQcm9wZXJ0eUNhcGFjaXR5LAorICAgICAgICBoYXNJbmRleGluZ0hlYWRlcihzdHJ1Y3R1
cmUtPmluZGV4aW5nVHlwZSgpKSwKKyAgICAgICAgaW5kZXhpbmdIZWFkZXIoKS0+aW5kZXhpbmdQ
YXlsb2FkU2l6ZUluQnl0ZXMoc3RydWN0dXJlKSwgbmV3UHJvcGVydHlDYXBhY2l0eSk7Cit9CisK
K2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Z3Jvd1Byb3BlcnR5U3RvcmFnZShKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBzaXplX3QgbmV3UHJv
cGVydHlDYXBhY2l0eSkKK3sKKyAgICByZXR1cm4gZ3Jvd1Byb3BlcnR5U3RvcmFnZSgKKyAgICAg
ICAgZ2xvYmFsRGF0YSwgb2xkU3RydWN0dXJlLCBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFj
aXR5KCksIG5ld1Byb3BlcnR5Q2FwYWNpdHkpOworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0
ZXJmbHk6Omdyb3dBcnJheVJpZ2h0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJl
KiBvbGRTdHJ1Y3R1cmUsIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhZEluZGV4aW5n
SGVhZGVyLCBzaXplX3Qgb2xkSW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdJ
bmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKK3sKKyAgICBBU1NFUlRfVU5VU0VEKG9sZFN0cnVj
dHVyZSwgIWluZGV4aW5nSGVhZGVyKCktPnByZUNhcGFjaXR5KG9sZFN0cnVjdHVyZSkpOworICAg
IEFTU0VSVF9VTlVTRUQob2xkU3RydWN0dXJlLCBoYWRJbmRleGluZ0hlYWRlciA9PSBoYXNJbmRl
eGluZ0hlYWRlcihvbGRTdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSk7CisgICAgdm9pZCogdGhl
QmFzZSA9IGJhc2UoMCwgcHJvcGVydHlDYXBhY2l0eSk7CisgICAgc2l6ZV90IG9sZFNpemUgPSB0
b3RhbFNpemUoMCwgcHJvcGVydHlDYXBhY2l0eSwgaGFkSW5kZXhpbmdIZWFkZXIsIG9sZEluZGV4
aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBzaXplX3QgbmV3U2l6ZSA9IHRvdGFsU2l6ZSgw
LCBwcm9wZXJ0eUNhcGFjaXR5LCB0cnVlLCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7
CisgICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5UmVhbGxvY2F0ZVN0b3JhZ2UoJnRoZUJhc2Us
IG9sZFNpemUsIG5ld1NpemUpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gZnJvbUJh
c2UodGhlQmFzZSwgMCwgcHJvcGVydHlDYXBhY2l0eSk7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkq
IEJ1dHRlcmZseTo6Z3Jvd0FycmF5UmlnaHQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1
Y3R1cmUqIG9sZFN0cnVjdHVyZSwgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVz
KQoreworICAgIHJldHVybiBncm93QXJyYXlSaWdodCgKKyAgICAgICAgZ2xvYmFsRGF0YSwgb2xk
U3RydWN0dXJlLCBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCksCisgICAgICAgIGhh
c0luZGV4aW5nSGVhZGVyKG9sZFN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpLAorICAgICAgICBp
bmRleGluZ0hlYWRlcigpLT5pbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyhvbGRTdHJ1Y3R1cmUp
LCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkq
IEJ1dHRlcmZseTo6cmVzaXplQXJyYXkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3Qg
cHJvcGVydHlDYXBhY2l0eSwgYm9vbCBvbGRIYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IG9sZElu
ZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzLCBzaXplX3QgbmV3UHJlQ2FwYWNpdHksIGJvb2wgbmV3
SGFzSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykK
K3sKKyAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQoCisgICAgICAg
IGdsb2JhbERhdGEsIG5ld1ByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBuZXdIYXNJbmRl
eGluZ0hlYWRlciwgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIC8vIEZJWE1F
OiBUaGlzIGNvdWxkIGJlIG1hZGUgbXVjaCBtb3JlIGVmZmljaWVudCBpZiB3ZSB1c2VkIHRoZSBw
cm9wZXJ0eSBzaXplLAorICAgIC8vIG5vdCB0aGUgY2FwYWNpdHkuCisgICAgdm9pZCogdG8gPSBy
ZXN1bHQtPnByb3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVydHlDYXBhY2l0eTsKKyAgICB2b2lkKiBm
cm9tID0gcHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eUNhcGFjaXR5OworICAgIHNpemVfdCBz
aXplID0gc3RkOjptaW4oCisgICAgICAgIHRvdGFsU2l6ZSgwLCBwcm9wZXJ0eUNhcGFjaXR5LCBv
bGRIYXNJbmRleGluZ0hlYWRlciwgb2xkSW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpLAorICAg
ICAgICB0b3RhbFNpemUoMCwgcHJvcGVydHlDYXBhY2l0eSwgbmV3SGFzSW5kZXhpbmdIZWFkZXIs
IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKSk7CisgICAgbWVtY3B5KHRvLCBmcm9tLCBz
aXplKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJm
bHk6OnJlc2l6ZUFycmF5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIHNpemVfdCBuZXdQcmVDYXBhY2l0eSwgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNp
emVJbkJ5dGVzKQoreworICAgIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIgPSBKU0M6Omhhc0luZGV4
aW5nSGVhZGVyKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpOworICAgIHJldHVybiByZXNpemVB
cnJheSgKKyAgICAgICAgZ2xvYmFsRGF0YSwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgp
LCBoYXNJbmRleGluZ0hlYWRlciwKKyAgICAgICAgaW5kZXhpbmdIZWFkZXIoKS0+aW5kZXhpbmdQ
YXlsb2FkU2l6ZUluQnl0ZXMoc3RydWN0dXJlKSwgbmV3UHJlQ2FwYWNpdHksCisgICAgICAgIGhh
c0luZGV4aW5nSGVhZGVyLCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Cit9CisKK2lu
bGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6dW5zaGlmdChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
c2l6ZV90IG51bWJlck9mU2xvdHMpCit7CisgICAgQVNTRVJUKGhhc0FycmF5U3RvcmFnZShzdHJ1
Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSk7CisgICAgQVNTRVJUKG51bWJlck9mU2xvdHMgPD0gaW5k
ZXhpbmdIZWFkZXIoKS0+cHJlQ2FwYWNpdHkoc3RydWN0dXJlKSk7CisgICAgdW5zaWduZWQgcHJv
cGVydHlDYXBhY2l0eSA9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKKyAgICAvLyBG
SVhNRTogSXQgd291bGQgcHJvYmFibHkgYmUgd2lzZSB0byByZXdyaXRlIHRoaXMgYXMgYSBsb29w
IHNpbmNlICgxKSB3ZSBrbm93IGluIHdoaWNoCisgICAgLy8gZGlyZWN0aW9uIHdlJ3JlIG1vdmlu
ZyBtZW1vcnkgc28gd2UgZG9uJ3QgbmVlZCB0aGUgZXh0cmEgY2hlY2sgb2YgbWVtbW92ZSBhbmQg
KDIpIHdlJ3JlCisgICAgLy8gbW92aW5nIGEgc21hbGwgYW1vdW50IG9mIG1lbW9yeSBpbiB0aGUg
Y29tbW9uIGNhc2Ugc28gdGhlIHRocm91Z2hwdXQgb2YgbWVtbW92ZSB3b24ndAorICAgIC8vIGFt
b3J0aXplIHRoZSBvdmVyaGVhZCBvZiBjYWxsaW5nIGl0LiBBbmQgbm8sIHdlIGNhbm5vdCByZWx5
IG9uIHRoZSBDKysgY29tcGlsZXIgdG8KKyAgICAvLyBpbmxpbmUgbWVtbW92ZSAocGFydGljdWxh
cmx5IHNpbmNlIHRoZSBzaXplIGFyZ3VtZW50IGlzIGxpa2VseSB0byBiZSB2YXJpYWJsZSksIG5v
ciBjYW4KKyAgICAvLyB3ZSByZWx5IG9uIHRoZSBjb21waWxlciB0byByZWNvZ25pemUgdGhlIG9y
ZGVyaW5nIG9mIHRoZSBwb2ludGVyIGFyZ3VtZW50cyAoc2luY2UKKyAgICAvLyBwcm9wZXJ0eUNh
cGFjaXR5IGlzIHZhcmlhYmxlIGFuZCBjb3VsZCBjYXVzZSB3cmFwLWFyb3VuZCBhcyBmYXIgYXMg
dGhlIGNvbXBpbGVyIGtub3dzKS4KKyAgICBtZW1tb3ZlKAorICAgICAgICBwcm9wZXJ0eVN0b3Jh
Z2UoKSAtIG51bWJlck9mU2xvdHMgLSBwcm9wZXJ0eUNhcGFjaXR5LAorICAgICAgICBwcm9wZXJ0
eVN0b3JhZ2UoKSAtIHByb3BlcnR5Q2FwYWNpdHksCisgICAgICAgIHNpemVvZihFbmNvZGVkSlNW
YWx1ZSkgKiBwcm9wZXJ0eUNhcGFjaXR5ICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSArIEFycmF5
U3RvcmFnZTo6c2l6ZUZvcigwKSk7CisgICAgcmV0dXJuIEluZGV4aW5nSGVhZGVyOjpmcm9tRW5k
T2YocHJvcGVydHlTdG9yYWdlKCkgLSBudW1iZXJPZlNsb3RzKS0+YnV0dGVyZmx5KCk7Cit9CisK
K2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6c2hpZnQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IHNpemVfdCBudW1iZXJPZlNsb3RzKQoreworICAgIEFTU0VSVChoYXNBcnJheVN0b3JhZ2Uoc3Ry
dWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpOworICAgIHVuc2lnbmVkIHByb3BlcnR5Q2FwYWNpdHkg
PSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCk7CisgICAgLy8gRklYTUU6IFNlZSBjb21t
ZW50IGluIHVuc2hpZnQoKSwgYWJvdmUuCisgICAgbWVtbW92ZSgKKyAgICAgICAgcHJvcGVydHlT
dG9yYWdlKCkgLSBwcm9wZXJ0eUNhcGFjaXR5ICsgbnVtYmVyT2ZTbG90cywKKyAgICAgICAgcHJv
cGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eUNhcGFjaXR5LAorICAgICAgICBzaXplb2YoRW5jb2Rl
ZEpTVmFsdWUpICogcHJvcGVydHlDYXBhY2l0eSArIHNpemVvZihJbmRleGluZ0hlYWRlcikgKyBB
cnJheVN0b3JhZ2U6OnNpemVGb3IoMCkpOworICAgIHJldHVybiBJbmRleGluZ0hlYWRlcjo6ZnJv
bUVuZE9mKHByb3BlcnR5U3RvcmFnZSgpICsgbnVtYmVyT2ZTbG90cyktPmJ1dHRlcmZseSgpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEJ1dHRlcmZseUlubGluZU1ldGhv
ZHNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxp
bmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVy
Zmx5SW5saW5lcy5oCShyZXZpc2lvbiAxMzM5NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9CdXR0ZXJmbHlJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDEyICsyMywx
MiBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBCdXR0ZXJmbHlJbmxpbmVNZXRo
b2RzX2gKLSNkZWZpbmUgQnV0dGVyZmx5SW5saW5lTWV0aG9kc19oCisjaWZuZGVmIEJ1dHRlcmZs
eUlubGluZXNfaAorI2RlZmluZSBCdXR0ZXJmbHlJbmxpbmVzX2gKIAogI2luY2x1ZGUgIkFycmF5
U3RvcmFnZS5oIgogI2luY2x1ZGUgIkJ1dHRlcmZseS5oIgotI2luY2x1ZGUgIkNvcGllZFNwYWNl
SW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lcy5oIgogI2luY2x1
ZGUgIkNvcHlWaXNpdG9yLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgiCiAjaW5jbHVkZSAi
U3RydWN0dXJlLmgiCkBAIC0xNzYsNSArMTc2LDUgQEAgaW5saW5lIEJ1dHRlcmZseSogQnV0dGVy
Zmx5OjpzaGlmdChTdHJ1YwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAotI2VuZGlmIC8vIEJ1dHRl
cmZseUlubGluZU1ldGhvZHNfaAorI2VuZGlmIC8vIEJ1dHRlcmZseUlubGluZXNfaAogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlcklubGluZU1ldGhv
ZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGlu
Z0hlYWRlcklubGluZU1ldGhvZHMuaAkocmV2aXNpb24gMTMzOTczKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNjQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKLSAqLwotCi0jaWZuZGVmIEluZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kc19oCi0jZGVm
aW5lIEluZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kc19oCi0KLSNpbmNsdWRlICJBcnJheVN0b3Jh
Z2UuaCIKLSNpbmNsdWRlICJJbmRleGluZ0hlYWRlci5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZS5o
IgotCi1uYW1lc3BhY2UgSlNDIHsKLQotaW5saW5lIHNpemVfdCBJbmRleGluZ0hlYWRlcjo6cHJl
Q2FwYWNpdHkoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi17Ci0gICAgaWYgKExJS0VMWSghaGFzQXJy
YXlTdG9yYWdlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKSkKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgCi0gICAgcmV0dXJuIGFycmF5U3RvcmFnZSgpLT5tX2luZGV4QmlhczsKLX0KLQotaW5s
aW5lIHNpemVfdCBJbmRleGluZ0hlYWRlcjo6aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMoU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCi17Ci0gICAgc3dpdGNoIChzdHJ1Y3R1cmUtPmluZGV4aW5nVHlw
ZSgpKSB7Ci0gICAgY2FzZSBBTExfVU5ERUNJREVEX0lOREVYSU5HX1RZUEVTOgotICAgIGNhc2Ug
QUxMX0lOVDMyX0lOREVYSU5HX1RZUEVTOgotICAgIGNhc2UgQUxMX0RPVUJMRV9JTkRFWElOR19U
WVBFUzoKLSAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgotICAgICAgICBy
ZXR1cm4gdmVjdG9yTGVuZ3RoKCkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOwotICAgICAgICAK
LSAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgotICAgICAgICByZXR1
cm4gQXJyYXlTdG9yYWdlOjpzaXplRm9yKGFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKSk7
Ci0gICAgICAgIAotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVCghaGFzSW5kZXhlZFByb3Bl
cnRpZXMoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpOwotICAgICAgICByZXR1cm4gMDsKLSAg
ICB9Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gSW5kZXhpbmdIZWFkZXJJ
bmxpbmVNZXRob2RzX2gKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5k
ZXhpbmdIZWFkZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW5kZXhpbmdIZWFkZXJJbmxpbmVzLmgJKHJldmlzaW9uIDEzMzk1NSkJKGZyb20g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2Rz
Lmg6MTMzOTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFk
ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEluZGV4aW5nSGVhZGVy
SW5saW5lTWV0aG9kc19oCisjZGVmaW5lIEluZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kc19oCisK
KyNpbmNsdWRlICJBcnJheVN0b3JhZ2UuaCIKKyNpbmNsdWRlICJJbmRleGluZ0hlYWRlci5oIgor
I2luY2x1ZGUgIlN0cnVjdHVyZS5oIgorCituYW1lc3BhY2UgSlNDIHsKKworaW5saW5lIHNpemVf
dCBJbmRleGluZ0hlYWRlcjo6cHJlQ2FwYWNpdHkoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7Cisg
ICAgaWYgKExJS0VMWSghaGFzQXJyYXlTdG9yYWdlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkp
KSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgcmV0dXJuIGFycmF5U3RvcmFnZSgpLT5t
X2luZGV4QmlhczsKK30KKworaW5saW5lIHNpemVfdCBJbmRleGluZ0hlYWRlcjo6aW5kZXhpbmdQ
YXlsb2FkU2l6ZUluQnl0ZXMoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAgc3dpdGNoIChz
dHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBTExfVU5ERUNJREVEX0lOREVY
SU5HX1RZUEVTOgorICAgIGNhc2UgQUxMX0lOVDMyX0lOREVYSU5HX1RZUEVTOgorICAgIGNhc2Ug
QUxMX0RPVUJMRV9JTkRFWElOR19UWVBFUzoKKyAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVY
SU5HX1RZUEVTOgorICAgICAgICByZXR1cm4gdmVjdG9yTGVuZ3RoKCkgKiBzaXplb2YoRW5jb2Rl
ZEpTVmFsdWUpOworICAgICAgICAKKyAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5H
X1RZUEVTOgorICAgICAgICByZXR1cm4gQXJyYXlTdG9yYWdlOjpzaXplRm9yKGFycmF5U3RvcmFn
ZSgpLT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFT
U0VSVCghaGFzSW5kZXhlZFByb3BlcnRpZXMoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpOwor
ICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5k
aWYgLy8gSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXJJbmxpbmVzLmgJKHJl
dmlzaW9uIDEzMzk1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5n
SGVhZGVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw4ICsyMyw4IEBACiAgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKICAqLwogCi0jaWZuZGVmIEluZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kc19oCi0j
ZGVmaW5lIEluZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kc19oCisjaWZuZGVmIEluZGV4aW5nSGVh
ZGVySW5saW5lc19oCisjZGVmaW5lIEluZGV4aW5nSGVhZGVySW5saW5lc19oCiAKICNpbmNsdWRl
ICJBcnJheVN0b3JhZ2UuaCIKICNpbmNsdWRlICJJbmRleGluZ0hlYWRlci5oIgpAQCAtNjAsNSAr
NjAsNSBAQCBpbmxpbmUgc2l6ZV90IEluZGV4aW5nSGVhZGVyOjppbmRleGluZ1BhCiAKIH0gLy8g
bmFtZXNwYWNlIEpTQwogCi0jZW5kaWYgLy8gSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzX2gK
KyNlbmRpZiAvLyBJbmRleGluZ0hlYWRlcklubGluZXNfaAogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uaAkocmV2aXNpb24gMTMzOTczKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMwLDcgKzMwLDcgQEAKICNkZWZpbmUgSlNBY3RpdmF0aW9uX2gKIAogI2luY2x1ZGUg
IkNvZGVCbG9jay5oIgotI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oIgorI2lu
Y2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTVmFyaWFibGVPYmplY3Qu
aCIKICNpbmNsdWRlICJOb2Rlcy5oIgogI2luY2x1ZGUgIlN5bWJvbFRhYmxlLmgiCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAkocmV2aXNpb24gMTMzOTcz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI0LDE0ICsyNCwxNCBAQAogI2luY2x1ZGUgIkpTQXJyYXkuaCIKIAogI2luY2x1
ZGUgIkFycmF5UHJvdG90eXBlLmgiCi0jaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5o
IgotI2luY2x1ZGUgIkNvcGllZFNwYWNlLmgiCi0jaW5jbHVkZSAiQ29waWVkU3BhY2VJbmxpbmVN
ZXRob2RzLmgiCisjaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lcy5oIgogI2luY2x1ZGUgIkNhY2hl
ZENhbGwuaCIKKyNpbmNsdWRlICJDb3BpZWRTcGFjZS5oIgorI2luY2x1ZGUgIkNvcGllZFNwYWNl
SW5saW5lcy5oIgogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiRXhlY3V0YWJsZS5oIgog
I2luY2x1ZGUgIkdldHRlclNldHRlci5oIgotI2luY2x1ZGUgIkluZGV4aW5nSGVhZGVySW5saW5l
TWV0aG9kcy5oIgorI2luY2x1ZGUgIkluZGV4aW5nSGVhZGVySW5saW5lcy5oIgogI2luY2x1ZGUg
IlByb3BlcnR5TmFtZUFycmF5LmgiCiAjaW5jbHVkZSAiUmVqZWN0LmgiCiAjaW5jbHVkZSA8d3Rm
L0FWTFRyZWUuaD4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXku
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJ
KHJldmlzaW9uIDEzMzk3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJy
YXkuaAkod29ya2luZyBjb3B5KQpAQCAtMjIsNyArMjIsNyBAQAogI2RlZmluZSBKU0FycmF5X2gK
IAogI2luY2x1ZGUgIkFycmF5Q29udmVudGlvbnMuaCIKLSNpbmNsdWRlICJCdXR0ZXJmbHlJbmxp
bmVNZXRob2RzLmgiCisjaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lcy5oIgogI2luY2x1ZGUgIkpT
T2JqZWN0LmgiCiAKIG5hbWVzcGFjZSBKU0MgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNDZWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNDZWxsLmgJKHJldmlzaW9uIDEzMzk3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQ2VsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw5ICsyOCw5IEBACiAjaW5j
bHVkZSAiQ29uc3RydWN0RGF0YS5oIgogI2luY2x1ZGUgIkhlYXAuaCIKICNpbmNsdWRlICJKU0xv
Y2suaCIKLSNpbmNsdWRlICJKU1ZhbHVlSW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkpTVmFs
dWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKLSNpbmNsdWRlICJTbG90Vmlz
aXRvcklubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKICNp
bmNsdWRlICJUeXBlZEFycmF5RGVzY3JpcHRvci5oIgogI2luY2x1ZGUgIldyaXRlQmFycmllci5o
IgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMTMzOTczKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwx
NCArMjQsMTQgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgog
Ci0jaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oIgotI2luY2x1ZGUgIkNvcGllZFNw
YWNlSW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkJ1dHRlcmZseUlubGluZXMuaCIKKyNpbmNs
dWRlICJDb3BpZWRTcGFjZUlubGluZXMuaCIKICNpbmNsdWRlICJDb3B5VmlzaXRvci5oIgotI2lu
Y2x1ZGUgIkNvcHlWaXNpdG9ySW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkNvcHlWaXNpdG9y
SW5saW5lcy5oIgogI2luY2x1ZGUgIkRhdGVQcm90b3R5cGUuaCIKICNpbmNsdWRlICJFcnJvckNv
bnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCi0jaW5jbHVkZSAiSW5kZXhp
bmdIZWFkZXJJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiSW5kZXhpbmdIZWFkZXJJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0Lmgi
CiAjaW5jbHVkZSAiTG9va3VwLmgiCkBAIC00Miw3ICs0Miw3IEBACiAjaW5jbHVkZSAiUHJvcGVy
dHlEZXNjcmlwdG9yLmgiCiAjaW5jbHVkZSAiUHJvcGVydHlOYW1lQXJyYXkuaCIKICNpbmNsdWRl
ICJSZWplY3QuaCIKLSNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZU1ldGhvZHMuaCIKKyNpbmNs
dWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKICNpbmNsdWRlIDxtYXRoLmg+CiAjaW5jbHVkZSA8
d3RmL0Fzc2VydGlvbnMuaD4KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNWYWx1ZUlubGluZU1ldGhvZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1ZhbHVlSW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAxMzM5NzMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlSW5saW5lTWV0aG9kcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDQ5NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgSlNWYWx1ZUlubGluZU1ldGhvZHNfaAotI2RlZmlu
ZSBKU1ZhbHVlSW5saW5lTWV0aG9kc19oCi0KLSNpbmNsdWRlICJKU1ZhbHVlLmgiCi0KLW5hbWVz
cGFjZSBKU0MgewotCi0gICAgQUxXQVlTX0lOTElORSBpbnQzMl90IEpTVmFsdWU6OnRvSW50MzIo
RXhlY1N0YXRlKiBleGVjKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKGlzSW50MzIoKSkKLSAg
ICAgICAgICAgIHJldHVybiBhc0ludDMyKCk7Ci0gICAgICAgIHJldHVybiBKU0M6OnRvSW50MzIo
dG9OdW1iZXIoZXhlYykpOwotICAgIH0KLQotICAgIGlubGluZSB1aW50MzJfdCBKU1ZhbHVlOjp0
b1VJbnQzMihFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0Ci0gICAgewotICAgICAgICAvLyBTZWUgY29t
bWVudCBvbiBKU0M6OnRvVUludDMyLCBhYm92ZS4KLSAgICAgICAgcmV0dXJuIHRvSW50MzIoZXhl
Yyk7Ci0gICAgfQotCi0gICAgaW5saW5lIGJvb2wgSlNWYWx1ZTo6aXNVSW50MzIoKSBjb25zdAot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGlzSW50MzIoKSAmJiBhc0ludDMyKCkgPj0gMDsKLSAgICB9
Ci0KLSAgICBpbmxpbmUgdWludDMyX3QgSlNWYWx1ZTo6YXNVSW50MzIoKSBjb25zdAotICAgIHsK
LSAgICAgICAgQVNTRVJUKGlzVUludDMyKCkpOwotICAgICAgICByZXR1cm4gYXNJbnQzMigpOwot
ICAgIH0KLQotICAgIGlubGluZSBkb3VibGUgSlNWYWx1ZTo6YXNOdW1iZXIoKSBjb25zdAotICAg
IHsKLSAgICAgICAgQVNTRVJUKGlzTnVtYmVyKCkpOwotICAgICAgICByZXR1cm4gaXNJbnQzMigp
ID8gYXNJbnQzMigpIDogYXNEb3VibGUoKTsKLSAgICB9Ci0KLSAgICBpbmxpbmUgSlNWYWx1ZSBq
c05hTigpCi0gICAgewotICAgICAgICByZXR1cm4gSlNWYWx1ZShRTmFOKTsKLSAgICB9Ci0KLSAg
ICBpbmxpbmUgSlNWYWx1ZTo6SlNWYWx1ZShjaGFyIGkpCi0gICAgewotICAgICAgICAqdGhpcyA9
IEpTVmFsdWUoc3RhdGljX2Nhc3Q8aW50MzJfdD4oaSkpOwotICAgIH0KLQotICAgIGlubGluZSBK
U1ZhbHVlOjpKU1ZhbHVlKHVuc2lnbmVkIGNoYXIgaSkKLSAgICB7Ci0gICAgICAgICp0aGlzID0g
SlNWYWx1ZShzdGF0aWNfY2FzdDxpbnQzMl90PihpKSk7Ci0gICAgfQotCi0gICAgaW5saW5lIEpT
VmFsdWU6OkpTVmFsdWUoc2hvcnQgaSkKLSAgICB7Ci0gICAgICAgICp0aGlzID0gSlNWYWx1ZShz
dGF0aWNfY2FzdDxpbnQzMl90PihpKSk7Ci0gICAgfQotCi0gICAgaW5saW5lIEpTVmFsdWU6OkpT
VmFsdWUodW5zaWduZWQgc2hvcnQgaSkKLSAgICB7Ci0gICAgICAgICp0aGlzID0gSlNWYWx1ZShz
dGF0aWNfY2FzdDxpbnQzMl90PihpKSk7Ci0gICAgfQotCi0gICAgaW5saW5lIEpTVmFsdWU6OkpT
VmFsdWUodW5zaWduZWQgaSkKLSAgICB7Ci0gICAgICAgIGlmIChzdGF0aWNfY2FzdDxpbnQzMl90
PihpKSA8IDApIHsKLSAgICAgICAgICAgICp0aGlzID0gSlNWYWx1ZShFbmNvZGVBc0RvdWJsZSwg
c3RhdGljX2Nhc3Q8ZG91YmxlPihpKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LSAgICAgICAgKnRoaXMgPSBKU1ZhbHVlKHN0YXRpY19jYXN0PGludDMyX3Q+KGkpKTsKLSAgICB9
Ci0KLSAgICBpbmxpbmUgSlNWYWx1ZTo6SlNWYWx1ZShsb25nIGkpCi0gICAgewotICAgICAgICBp
ZiAoc3RhdGljX2Nhc3Q8aW50MzJfdD4oaSkgIT0gaSkgewotICAgICAgICAgICAgKnRoaXMgPSBK
U1ZhbHVlKEVuY29kZUFzRG91YmxlLCBzdGF0aWNfY2FzdDxkb3VibGU+KGkpKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAqdGhpcyA9IEpTVmFsdWUoc3RhdGljX2Nh
c3Q8aW50MzJfdD4oaSkpOwotICAgIH0KLQotICAgIGlubGluZSBKU1ZhbHVlOjpKU1ZhbHVlKHVu
c2lnbmVkIGxvbmcgaSkKLSAgICB7Ci0gICAgICAgIGlmIChzdGF0aWNfY2FzdDx1aW50MzJfdD4o
aSkgIT0gaSkgewotICAgICAgICAgICAgKnRoaXMgPSBKU1ZhbHVlKEVuY29kZUFzRG91YmxlLCBz
dGF0aWNfY2FzdDxkb3VibGU+KGkpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgICAgICAqdGhpcyA9IEpTVmFsdWUoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGkpKTsKLSAgICB9
Ci0KLSAgICBpbmxpbmUgSlNWYWx1ZTo6SlNWYWx1ZShsb25nIGxvbmcgaSkKLSAgICB7Ci0gICAg
ICAgIGlmIChzdGF0aWNfY2FzdDxpbnQzMl90PihpKSAhPSBpKSB7Ci0gICAgICAgICAgICAqdGhp
cyA9IEpTVmFsdWUoRW5jb2RlQXNEb3VibGUsIHN0YXRpY19jYXN0PGRvdWJsZT4oaSkpOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgICp0aGlzID0gSlNWYWx1ZShzdGF0
aWNfY2FzdDxpbnQzMl90PihpKSk7Ci0gICAgfQotCi0gICAgaW5saW5lIEpTVmFsdWU6OkpTVmFs
dWUodW5zaWduZWQgbG9uZyBsb25nIGkpCi0gICAgewotICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8
dWludDMyX3Q+KGkpICE9IGkpIHsKLSAgICAgICAgICAgICp0aGlzID0gSlNWYWx1ZShFbmNvZGVB
c0RvdWJsZSwgc3RhdGljX2Nhc3Q8ZG91YmxlPihpKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICAgICAgKnRoaXMgPSBKU1ZhbHVlKHN0YXRpY19jYXN0PHVpbnQzMl90Pihp
KSk7Ci0gICAgfQotCi0gICAgaW5saW5lIEpTVmFsdWU6OkpTVmFsdWUoZG91YmxlIGQpCi0gICAg
ewotICAgICAgICBjb25zdCBpbnQzMl90IGFzSW50MzIgPSBzdGF0aWNfY2FzdDxpbnQzMl90Pihk
KTsKLSAgICAgICAgaWYgKGFzSW50MzIgIT0gZCB8fCAoIWFzSW50MzIgJiYgc2lnbmJpdChkKSkp
IHsgLy8gdHJ1ZSBmb3IgLTAuMAotICAgICAgICAgICAgKnRoaXMgPSBKU1ZhbHVlKEVuY29kZUFz
RG91YmxlLCBkKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAqdGhp
cyA9IEpTVmFsdWUoc3RhdGljX2Nhc3Q8aW50MzJfdD4oZCkpOwotICAgIH0KLQotICAgIGlubGlu
ZSBFbmNvZGVkSlNWYWx1ZSBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiB2YWx1ZS51LmFzSW50NjQ7Ci0gICAgfQotCi0gICAgaW5saW5lIEpTVmFs
dWUgSlNWYWx1ZTo6ZGVjb2RlKEVuY29kZWRKU1ZhbHVlIGVuY29kZWRKU1ZhbHVlKQotICAgIHsK
LSAgICAgICAgSlNWYWx1ZSB2OwotICAgICAgICB2LnUuYXNJbnQ2NCA9IGVuY29kZWRKU1ZhbHVl
OwotICAgICAgICByZXR1cm4gdjsKLSAgICB9Ci0KLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAg
IGlubGluZSBKU1ZhbHVlOjpKU1ZhbHVlKCkKLSAgICB7Ci0gICAgICAgIHUuYXNCaXRzLnRhZyA9
IEVtcHR5VmFsdWVUYWc7Ci0gICAgICAgIHUuYXNCaXRzLnBheWxvYWQgPSAwOwotICAgIH0KLQot
ICAgIGlubGluZSBKU1ZhbHVlOjpKU1ZhbHVlKEpTTnVsbFRhZykKLSAgICB7Ci0gICAgICAgIHUu
YXNCaXRzLnRhZyA9IE51bGxUYWc7Ci0gICAgICAgIHUuYXNCaXRzLnBheWxvYWQgPSAwOwotICAg
IH0KLSAgICAKLSAgICBpbmxpbmUgSlNWYWx1ZTo6SlNWYWx1ZShKU1VuZGVmaW5lZFRhZykKLSAg
ICB7Ci0gICAgICAgIHUuYXNCaXRzLnRhZyA9IFVuZGVmaW5lZFRhZzsKLSAgICAgICAgdS5hc0Jp
dHMucGF5bG9hZCA9IDA7Ci0gICAgfQotICAgIAotICAgIGlubGluZSBKU1ZhbHVlOjpKU1ZhbHVl
KEpTVHJ1ZVRhZykKLSAgICB7Ci0gICAgICAgIHUuYXNCaXRzLnRhZyA9IEJvb2xlYW5UYWc7Ci0g
ICAgICAgIHUuYXNCaXRzLnBheWxvYWQgPSAxOwotICAgIH0KLSAgICAKLSAgICBpbmxpbmUgSlNW
YWx1ZTo6SlNWYWx1ZShKU0ZhbHNlVGFnKQotICAgIHsKLSAgICAgICAgdS5hc0JpdHMudGFnID0g
Qm9vbGVhblRhZzsKLSAgICAgICAgdS5hc0JpdHMucGF5bG9hZCA9IDA7Ci0gICAgfQotCi0gICAg
aW5saW5lIEpTVmFsdWU6OkpTVmFsdWUoSGFzaFRhYmxlRGVsZXRlZFZhbHVlVGFnKQotICAgIHsK
LSAgICAgICAgdS5hc0JpdHMudGFnID0gRGVsZXRlZFZhbHVlVGFnOwotICAgICAgICB1LmFzQml0
cy5wYXlsb2FkID0gMDsKLSAgICB9Ci0KLSAgICBpbmxpbmUgSlNWYWx1ZTo6SlNWYWx1ZShKU0Nl
bGwqIHB0cikKLSAgICB7Ci0gICAgICAgIGlmIChwdHIpCi0gICAgICAgICAgICB1LmFzQml0cy50
YWcgPSBDZWxsVGFnOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB1LmFzQml0cy50YWcgPSBF
bXB0eVZhbHVlVGFnOwotICAgICAgICB1LmFzQml0cy5wYXlsb2FkID0gcmVpbnRlcnByZXRfY2Fz
dDxpbnQzMl90PihwdHIpOwotICAgIH0KLQotICAgIGlubGluZSBKU1ZhbHVlOjpKU1ZhbHVlKGNv
bnN0IEpTQ2VsbCogcHRyKQotICAgIHsKLSAgICAgICAgaWYgKHB0cikKLSAgICAgICAgICAgIHUu
YXNCaXRzLnRhZyA9IENlbGxUYWc7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHUuYXNCaXRz
LnRhZyA9IEVtcHR5VmFsdWVUYWc7Ci0gICAgICAgIHUuYXNCaXRzLnBheWxvYWQgPSByZWludGVy
cHJldF9jYXN0PGludDMyX3Q+KGNvbnN0X2Nhc3Q8SlNDZWxsKj4ocHRyKSk7Ci0gICAgfQotCi0g
ICAgaW5saW5lIEpTVmFsdWU6Om9wZXJhdG9yIGJvb2woKSBjb25zdAotICAgIHsKLSAgICAgICAg
QVNTRVJUKHRhZygpICE9IERlbGV0ZWRWYWx1ZVRhZyk7Ci0gICAgICAgIHJldHVybiB0YWcoKSAh
PSBFbXB0eVZhbHVlVGFnOwotICAgIH0KLQotICAgIGlubGluZSBib29sIEpTVmFsdWU6Om9wZXJh
dG9yPT0oY29uc3QgSlNWYWx1ZSYgb3RoZXIpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4g
dS5hc0ludDY0ID09IG90aGVyLnUuYXNJbnQ2NDsKLSAgICB9Ci0KLSAgICBpbmxpbmUgYm9vbCBK
U1ZhbHVlOjpvcGVyYXRvciE9KGNvbnN0IEpTVmFsdWUmIG90aGVyKSBjb25zdAotICAgIHsKLSAg
ICAgICAgcmV0dXJuIHUuYXNJbnQ2NCAhPSBvdGhlci51LmFzSW50NjQ7Ci0gICAgfQotCi0gICAg
aW5saW5lIGJvb2wgSlNWYWx1ZTo6aXNFbXB0eSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1
cm4gdGFnKCkgPT0gRW1wdHlWYWx1ZVRhZzsKLSAgICB9Ci0KLSAgICBpbmxpbmUgYm9vbCBKU1Zh
bHVlOjppc1VuZGVmaW5lZCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gdGFnKCkgPT0g
VW5kZWZpbmVkVGFnOwotICAgIH0KLQotICAgIGlubGluZSBib29sIEpTVmFsdWU6OmlzTnVsbCgp
IGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gdGFnKCkgPT0gTnVsbFRhZzsKLSAgICB9Ci0K
LSAgICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjppc1VuZGVmaW5lZE9yTnVsbCgpIGNvbnN0Ci0gICAg
ewotICAgICAgICByZXR1cm4gaXNVbmRlZmluZWQoKSB8fCBpc051bGwoKTsKLSAgICB9Ci0KLSAg
ICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjppc0NlbGwoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0
dXJuIHRhZygpID09IENlbGxUYWc7Ci0gICAgfQotCi0gICAgaW5saW5lIGJvb2wgSlNWYWx1ZTo6
aXNJbnQzMigpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gdGFnKCkgPT0gSW50MzJUYWc7
Ci0gICAgfQotCi0gICAgaW5saW5lIGJvb2wgSlNWYWx1ZTo6aXNEb3VibGUoKSBjb25zdAotICAg
IHsKLSAgICAgICAgcmV0dXJuIHRhZygpIDwgTG93ZXN0VGFnOwotICAgIH0KLQotICAgIGlubGlu
ZSBib29sIEpTVmFsdWU6OmlzVHJ1ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gdGFn
KCkgPT0gQm9vbGVhblRhZyAmJiBwYXlsb2FkKCk7Ci0gICAgfQotCi0gICAgaW5saW5lIGJvb2wg
SlNWYWx1ZTo6aXNGYWxzZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gdGFnKCkgPT0g
Qm9vbGVhblRhZyAmJiAhcGF5bG9hZCgpOwotICAgIH0KLQotICAgIGlubGluZSB1aW50MzJfdCBK
U1ZhbHVlOjp0YWcoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIHUuYXNCaXRzLnRhZzsK
LSAgICB9Ci0gICAgCi0gICAgaW5saW5lIGludDMyX3QgSlNWYWx1ZTo6cGF5bG9hZCgpIGNvbnN0
Ci0gICAgewotICAgICAgICByZXR1cm4gdS5hc0JpdHMucGF5bG9hZDsKLSAgICB9Ci0gICAgCi0g
ICAgaW5saW5lIGludDMyX3QgSlNWYWx1ZTo6YXNJbnQzMigpIGNvbnN0Ci0gICAgewotICAgICAg
ICBBU1NFUlQoaXNJbnQzMigpKTsKLSAgICAgICAgcmV0dXJuIHUuYXNCaXRzLnBheWxvYWQ7Ci0g
ICAgfQotICAgIAotICAgIGlubGluZSBkb3VibGUgSlNWYWx1ZTo6YXNEb3VibGUoKSBjb25zdAot
ICAgIHsKLSAgICAgICAgQVNTRVJUKGlzRG91YmxlKCkpOwotICAgICAgICByZXR1cm4gdS5hc0Rv
dWJsZTsKLSAgICB9Ci0gICAgCi0gICAgQUxXQVlTX0lOTElORSBKU0NlbGwqIEpTVmFsdWU6OmFz
Q2VsbCgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoaXNDZWxsKCkpOwotICAgICAgICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxKU0NlbGwqPih1LmFzQml0cy5wYXlsb2FkKTsKLSAgICB9
Ci0KLSAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWU6OkpTVmFsdWUoRW5jb2RlQXNEb3VibGVUYWcs
IGRvdWJsZSBkKQotICAgIHsKLSAgICAgICAgdS5hc0RvdWJsZSA9IGQ7Ci0gICAgfQotCi0gICAg
aW5saW5lIEpTVmFsdWU6OkpTVmFsdWUoaW50IGkpCi0gICAgewotICAgICAgICB1LmFzQml0cy50
YWcgPSBJbnQzMlRhZzsKLSAgICAgICAgdS5hc0JpdHMucGF5bG9hZCA9IGk7Ci0gICAgfQotCi0j
aWYgRU5BQkxFKExMSU5UX0NfTE9PUCkKLSAgICBpbmxpbmUgSlNWYWx1ZTo6SlNWYWx1ZShpbnQz
Ml90IHRhZywgaW50MzJfdCBwYXlsb2FkKQotICAgIHsKLSAgICAgICAgdS5hc0JpdHMudGFnID0g
dGFnOwotICAgICAgICB1LmFzQml0cy5wYXlsb2FkID0gcGF5bG9hZDsKLSAgICB9Ci0jZW5kaWYK
LQotICAgIGlubGluZSBib29sIEpTVmFsdWU6OmlzTnVtYmVyKCkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBpc0ludDMyKCkgfHwgaXNEb3VibGUoKTsKLSAgICB9Ci0KLSAgICBpbmxpbmUg
Ym9vbCBKU1ZhbHVlOjppc0Jvb2xlYW4oKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGlz
VHJ1ZSgpIHx8IGlzRmFsc2UoKTsKLSAgICB9Ci0KLSAgICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjph
c0Jvb2xlYW4oKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGlzQm9vbGVhbigpKTsKLSAg
ICAgICAgcmV0dXJuIHBheWxvYWQoKTsKLSAgICB9Ci0KLSNlbHNlIC8vICFVU0UoSlNWQUxVRTMy
XzY0KSBpLmUuIFVTRShKU1ZBTFVFNjQpCi0KLSAgICAvLyAweDAgY2FuIG5ldmVyIG9jY3VyIG5h
dHVyYWxseSBiZWNhdXNlIGl0IGhhcyBhIHRhZyBvZiAwMCwgaW5kaWNhdGluZyBhIHBvaW50ZXIg
dmFsdWUsIGJ1dCBhIHBheWxvYWQgb2YgMHgwLCB3aGljaCBpcyBpbiB0aGUgKGludmFsaWQpIHpl
cm8gcGFnZS4KLSAgICBpbmxpbmUgSlNWYWx1ZTo6SlNWYWx1ZSgpCi0gICAgewotICAgICAgICB1
LmFzSW50NjQgPSBWYWx1ZUVtcHR5OwotICAgIH0KLQotICAgIC8vIDB4NCBjYW4gbmV2ZXIgb2Nj
dXIgbmF0dXJhbGx5IGJlY2F1c2UgaXQgaGFzIGEgdGFnIG9mIDAwLCBpbmRpY2F0aW5nIGEgcG9p
bnRlciB2YWx1ZSwgYnV0IGEgcGF5bG9hZCBvZiAweDQsIHdoaWNoIGlzIGluIHRoZSAoaW52YWxp
ZCkgemVybyBwYWdlLgotICAgIGlubGluZSBKU1ZhbHVlOjpKU1ZhbHVlKEhhc2hUYWJsZURlbGV0
ZWRWYWx1ZVRhZykKLSAgICB7Ci0gICAgICAgIHUuYXNJbnQ2NCA9IFZhbHVlRGVsZXRlZDsKLSAg
ICB9Ci0KLSAgICBpbmxpbmUgSlNWYWx1ZTo6SlNWYWx1ZShKU0NlbGwqIHB0cikKLSAgICB7Ci0g
ICAgICAgIHUuYXNJbnQ2NCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihwdHIpOwotICAg
IH0KLQotICAgIGlubGluZSBKU1ZhbHVlOjpKU1ZhbHVlKGNvbnN0IEpTQ2VsbCogcHRyKQotICAg
IHsKLSAgICAgICAgdS5hc0ludDY0ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGNvbnN0
X2Nhc3Q8SlNDZWxsKj4ocHRyKSk7Ci0gICAgfQotCi0gICAgaW5saW5lIEpTVmFsdWU6Om9wZXJh
dG9yIGJvb2woKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIHUuYXNJbnQ2NDsKLSAgICB9
Ci0KLSAgICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjpvcGVyYXRvcj09KGNvbnN0IEpTVmFsdWUmIG90
aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIHUuYXNJbnQ2NCA9PSBvdGhlci51LmFz
SW50NjQ7Ci0gICAgfQotCi0gICAgaW5saW5lIGJvb2wgSlNWYWx1ZTo6b3BlcmF0b3IhPShjb25z
dCBKU1ZhbHVlJiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiB1LmFzSW50NjQg
IT0gb3RoZXIudS5hc0ludDY0OwotICAgIH0KLQotICAgIGlubGluZSBib29sIEpTVmFsdWU6Omlz
RW1wdHkoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIHUuYXNJbnQ2NCA9PSBWYWx1ZUVt
cHR5OwotICAgIH0KLQotICAgIGlubGluZSBib29sIEpTVmFsdWU6OmlzVW5kZWZpbmVkKCkgY29u
c3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBhc1ZhbHVlKCkgPT0gSlNWYWx1ZShKU1VuZGVmaW5l
ZCk7Ci0gICAgfQotCi0gICAgaW5saW5lIGJvb2wgSlNWYWx1ZTo6aXNOdWxsKCkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBhc1ZhbHVlKCkgPT0gSlNWYWx1ZShKU051bGwpOwotICAgIH0K
LQotICAgIGlubGluZSBib29sIEpTVmFsdWU6OmlzVHJ1ZSgpIGNvbnN0Ci0gICAgewotICAgICAg
ICByZXR1cm4gYXNWYWx1ZSgpID09IEpTVmFsdWUoSlNUcnVlKTsKLSAgICB9Ci0KLSAgICBpbmxp
bmUgYm9vbCBKU1ZhbHVlOjppc0ZhbHNlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBh
c1ZhbHVlKCkgPT0gSlNWYWx1ZShKU0ZhbHNlKTsKLSAgICB9Ci0KLSAgICBpbmxpbmUgYm9vbCBK
U1ZhbHVlOjphc0Jvb2xlYW4oKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGlzQm9vbGVh
bigpKTsKLSAgICAgICAgcmV0dXJuIGFzVmFsdWUoKSA9PSBKU1ZhbHVlKEpTVHJ1ZSk7Ci0gICAg
fQotCi0gICAgaW5saW5lIGludDMyX3QgSlNWYWx1ZTo6YXNJbnQzMigpIGNvbnN0Ci0gICAgewot
ICAgICAgICBBU1NFUlQoaXNJbnQzMigpKTsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGlu
dDMyX3Q+KHUuYXNJbnQ2NCk7Ci0gICAgfQotCi0gICAgaW5saW5lIGJvb2wgSlNWYWx1ZTo6aXNE
b3VibGUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGlzTnVtYmVyKCkgJiYgIWlzSW50
MzIoKTsKLSAgICB9Ci0KLSAgICBpbmxpbmUgSlNWYWx1ZTo6SlNWYWx1ZShKU051bGxUYWcpCi0g
ICAgewotICAgICAgICB1LmFzSW50NjQgPSBWYWx1ZU51bGw7Ci0gICAgfQotICAgIAotICAgIGlu
bGluZSBKU1ZhbHVlOjpKU1ZhbHVlKEpTVW5kZWZpbmVkVGFnKQotICAgIHsKLSAgICAgICAgdS5h
c0ludDY0ID0gVmFsdWVVbmRlZmluZWQ7Ci0gICAgfQotCi0gICAgaW5saW5lIEpTVmFsdWU6OkpT
VmFsdWUoSlNUcnVlVGFnKQotICAgIHsKLSAgICAgICAgdS5hc0ludDY0ID0gVmFsdWVUcnVlOwot
ICAgIH0KLQotICAgIGlubGluZSBKU1ZhbHVlOjpKU1ZhbHVlKEpTRmFsc2VUYWcpCi0gICAgewot
ICAgICAgICB1LmFzSW50NjQgPSBWYWx1ZUZhbHNlOwotICAgIH0KLQotICAgIGlubGluZSBib29s
IEpTVmFsdWU6OmlzVW5kZWZpbmVkT3JOdWxsKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIC8vIFVu
ZGVmaW5lZCBhbmQgbnVsbCBzaGFyZSB0aGUgc2FtZSB2YWx1ZSwgYmFyIHRoZSAndW5kZWZpbmVk
JyBiaXQgaW4gdGhlIGV4dGVuZGVkIHRhZy4KLSAgICAgICAgcmV0dXJuICh1LmFzSW50NjQgJiB+
VGFnQml0VW5kZWZpbmVkKSA9PSBWYWx1ZU51bGw7Ci0gICAgfQotCi0gICAgaW5saW5lIGJvb2wg
SlNWYWx1ZTo6aXNCb29sZWFuKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiAodS5hc0lu
dDY0ICYgfjEpID09IFZhbHVlRmFsc2U7Ci0gICAgfQotCi0gICAgaW5saW5lIGJvb2wgSlNWYWx1
ZTo6aXNDZWxsKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiAhKHUuYXNJbnQ2NCAmIFRh
Z01hc2spOwotICAgIH0KLQotICAgIGlubGluZSBib29sIEpTVmFsdWU6OmlzSW50MzIoKSBjb25z
dAotICAgIHsKLSAgICAgICAgcmV0dXJuICh1LmFzSW50NjQgJiBUYWdUeXBlTnVtYmVyKSA9PSBU
YWdUeXBlTnVtYmVyOwotICAgIH0KLQotICAgIGlubGluZSBpbnQ2NF90IHJlaW50ZXJwcmV0RG91
YmxlVG9JbnQ2NChkb3VibGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gYml0d2lzZV9j
YXN0PGludDY0X3Q+KHZhbHVlKTsKLSAgICB9Ci0gICAgaW5saW5lIGRvdWJsZSByZWludGVycHJl
dEludDY0VG9Eb3VibGUoaW50NjRfdCB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBiaXR3
aXNlX2Nhc3Q8ZG91YmxlPih2YWx1ZSk7Ci0gICAgfQotCi0gICAgQUxXQVlTX0lOTElORSBKU1Zh
bHVlOjpKU1ZhbHVlKEVuY29kZUFzRG91YmxlVGFnLCBkb3VibGUgZCkKLSAgICB7Ci0gICAgICAg
IHUuYXNJbnQ2NCA9IHJlaW50ZXJwcmV0RG91YmxlVG9JbnQ2NChkKSArIERvdWJsZUVuY29kZU9m
ZnNldDsKLSAgICB9Ci0KLSAgICBpbmxpbmUgSlNWYWx1ZTo6SlNWYWx1ZShpbnQgaSkKLSAgICB7
Ci0gICAgICAgIHUuYXNJbnQ2NCA9IFRhZ1R5cGVOdW1iZXIgfCBzdGF0aWNfY2FzdDx1aW50MzJf
dD4oaSk7Ci0gICAgfQotCi0gICAgaW5saW5lIGRvdWJsZSBKU1ZhbHVlOjphc0RvdWJsZSgpIGNv
bnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoaXNEb3VibGUoKSk7Ci0gICAgICAgIHJldHVybiBy
ZWludGVycHJldEludDY0VG9Eb3VibGUodS5hc0ludDY0IC0gRG91YmxlRW5jb2RlT2Zmc2V0KTsK
LSAgICB9Ci0KLSAgICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjppc051bWJlcigpIGNvbnN0Ci0gICAg
ewotICAgICAgICByZXR1cm4gdS5hc0ludDY0ICYgVGFnVHlwZU51bWJlcjsKLSAgICB9Ci0KLSAg
ICBBTFdBWVNfSU5MSU5FIEpTQ2VsbCogSlNWYWx1ZTo6YXNDZWxsKCkgY29uc3QKLSAgICB7Ci0g
ICAgICAgIEFTU0VSVChpc0NlbGwoKSk7Ci0gICAgICAgIHJldHVybiB1LnB0cjsKLSAgICB9Ci0K
LSNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlm
IC8vIEpTVmFsdWVJbmxpbmVNZXRob2RzX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTVmFsdWVJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNWYWx1ZUlubGluZXMuaAkocmV2aXNpb24gMTMzOTU1KQkoZnJvbSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlSW5saW5lTWV0aG9kcy5oOjEzMzk1NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFsdWVJbmxpbmVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw0OTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU1ZhbHVlSW5saW5lTWV0aG9kc19oCisjZGVmaW5l
IEpTVmFsdWVJbmxpbmVNZXRob2RzX2gKKworI2luY2x1ZGUgIkpTVmFsdWUuaCIKKworbmFtZXNw
YWNlIEpTQyB7CisKKyAgICBBTFdBWVNfSU5MSU5FIGludDMyX3QgSlNWYWx1ZTo6dG9JbnQzMihF
eGVjU3RhdGUqIGV4ZWMpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXNJbnQzMigpKQorICAg
ICAgICAgICAgcmV0dXJuIGFzSW50MzIoKTsKKyAgICAgICAgcmV0dXJuIEpTQzo6dG9JbnQzMih0
b051bWJlcihleGVjKSk7CisgICAgfQorCisgICAgaW5saW5lIHVpbnQzMl90IEpTVmFsdWU6OnRv
VUludDMyKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKKyAgICB7CisgICAgICAgIC8vIFNlZSBjb21t
ZW50IG9uIEpTQzo6dG9VSW50MzIsIGFib3ZlLgorICAgICAgICByZXR1cm4gdG9JbnQzMihleGVj
KTsKKyAgICB9CisKKyAgICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjppc1VJbnQzMigpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gaXNJbnQzMigpICYmIGFzSW50MzIoKSA+PSAwOworICAgIH0K
KworICAgIGlubGluZSB1aW50MzJfdCBKU1ZhbHVlOjphc1VJbnQzMigpIGNvbnN0CisgICAgewor
ICAgICAgICBBU1NFUlQoaXNVSW50MzIoKSk7CisgICAgICAgIHJldHVybiBhc0ludDMyKCk7Cisg
ICAgfQorCisgICAgaW5saW5lIGRvdWJsZSBKU1ZhbHVlOjphc051bWJlcigpIGNvbnN0CisgICAg
eworICAgICAgICBBU1NFUlQoaXNOdW1iZXIoKSk7CisgICAgICAgIHJldHVybiBpc0ludDMyKCkg
PyBhc0ludDMyKCkgOiBhc0RvdWJsZSgpOworICAgIH0KKworICAgIGlubGluZSBKU1ZhbHVlIGpz
TmFOKCkKKyAgICB7CisgICAgICAgIHJldHVybiBKU1ZhbHVlKFFOYU4pOworICAgIH0KKworICAg
IGlubGluZSBKU1ZhbHVlOjpKU1ZhbHVlKGNoYXIgaSkKKyAgICB7CisgICAgICAgICp0aGlzID0g
SlNWYWx1ZShzdGF0aWNfY2FzdDxpbnQzMl90PihpKSk7CisgICAgfQorCisgICAgaW5saW5lIEpT
VmFsdWU6OkpTVmFsdWUodW5zaWduZWQgY2hhciBpKQorICAgIHsKKyAgICAgICAgKnRoaXMgPSBK
U1ZhbHVlKHN0YXRpY19jYXN0PGludDMyX3Q+KGkpKTsKKyAgICB9CisKKyAgICBpbmxpbmUgSlNW
YWx1ZTo6SlNWYWx1ZShzaG9ydCBpKQorICAgIHsKKyAgICAgICAgKnRoaXMgPSBKU1ZhbHVlKHN0
YXRpY19jYXN0PGludDMyX3Q+KGkpKTsKKyAgICB9CisKKyAgICBpbmxpbmUgSlNWYWx1ZTo6SlNW
YWx1ZSh1bnNpZ25lZCBzaG9ydCBpKQorICAgIHsKKyAgICAgICAgKnRoaXMgPSBKU1ZhbHVlKHN0
YXRpY19jYXN0PGludDMyX3Q+KGkpKTsKKyAgICB9CisKKyAgICBpbmxpbmUgSlNWYWx1ZTo6SlNW
YWx1ZSh1bnNpZ25lZCBpKQorICAgIHsKKyAgICAgICAgaWYgKHN0YXRpY19jYXN0PGludDMyX3Q+
KGkpIDwgMCkgeworICAgICAgICAgICAgKnRoaXMgPSBKU1ZhbHVlKEVuY29kZUFzRG91YmxlLCBz
dGF0aWNfY2FzdDxkb3VibGU+KGkpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgICAgICAqdGhpcyA9IEpTVmFsdWUoc3RhdGljX2Nhc3Q8aW50MzJfdD4oaSkpOworICAgIH0K
KworICAgIGlubGluZSBKU1ZhbHVlOjpKU1ZhbHVlKGxvbmcgaSkKKyAgICB7CisgICAgICAgIGlm
IChzdGF0aWNfY2FzdDxpbnQzMl90PihpKSAhPSBpKSB7CisgICAgICAgICAgICAqdGhpcyA9IEpT
VmFsdWUoRW5jb2RlQXNEb3VibGUsIHN0YXRpY19jYXN0PGRvdWJsZT4oaSkpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgICp0aGlzID0gSlNWYWx1ZShzdGF0aWNfY2Fz
dDxpbnQzMl90PihpKSk7CisgICAgfQorCisgICAgaW5saW5lIEpTVmFsdWU6OkpTVmFsdWUodW5z
aWduZWQgbG9uZyBpKQorICAgIHsKKyAgICAgICAgaWYgKHN0YXRpY19jYXN0PHVpbnQzMl90Pihp
KSAhPSBpKSB7CisgICAgICAgICAgICAqdGhpcyA9IEpTVmFsdWUoRW5jb2RlQXNEb3VibGUsIHN0
YXRpY19jYXN0PGRvdWJsZT4oaSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgICp0aGlzID0gSlNWYWx1ZShzdGF0aWNfY2FzdDx1aW50MzJfdD4oaSkpOworICAgIH0K
KworICAgIGlubGluZSBKU1ZhbHVlOjpKU1ZhbHVlKGxvbmcgbG9uZyBpKQorICAgIHsKKyAgICAg
ICAgaWYgKHN0YXRpY19jYXN0PGludDMyX3Q+KGkpICE9IGkpIHsKKyAgICAgICAgICAgICp0aGlz
ID0gSlNWYWx1ZShFbmNvZGVBc0RvdWJsZSwgc3RhdGljX2Nhc3Q8ZG91YmxlPihpKSk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgKnRoaXMgPSBKU1ZhbHVlKHN0YXRp
Y19jYXN0PGludDMyX3Q+KGkpKTsKKyAgICB9CisKKyAgICBpbmxpbmUgSlNWYWx1ZTo6SlNWYWx1
ZSh1bnNpZ25lZCBsb25nIGxvbmcgaSkKKyAgICB7CisgICAgICAgIGlmIChzdGF0aWNfY2FzdDx1
aW50MzJfdD4oaSkgIT0gaSkgeworICAgICAgICAgICAgKnRoaXMgPSBKU1ZhbHVlKEVuY29kZUFz
RG91YmxlLCBzdGF0aWNfY2FzdDxkb3VibGU+KGkpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICAqdGhpcyA9IEpTVmFsdWUoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGkp
KTsKKyAgICB9CisKKyAgICBpbmxpbmUgSlNWYWx1ZTo6SlNWYWx1ZShkb3VibGUgZCkKKyAgICB7
CisgICAgICAgIGNvbnN0IGludDMyX3QgYXNJbnQzMiA9IHN0YXRpY19jYXN0PGludDMyX3Q+KGQp
OworICAgICAgICBpZiAoYXNJbnQzMiAhPSBkIHx8ICghYXNJbnQzMiAmJiBzaWduYml0KGQpKSkg
eyAvLyB0cnVlIGZvciAtMC4wCisgICAgICAgICAgICAqdGhpcyA9IEpTVmFsdWUoRW5jb2RlQXNE
b3VibGUsIGQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgICp0aGlz
ID0gSlNWYWx1ZShzdGF0aWNfY2FzdDxpbnQzMl90PihkKSk7CisgICAgfQorCisgICAgaW5saW5l
IEVuY29kZWRKU1ZhbHVlIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHZhbHVlLnUuYXNJbnQ2NDsKKyAgICB9CisKKyAgICBpbmxpbmUgSlNWYWx1
ZSBKU1ZhbHVlOjpkZWNvZGUoRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEpTVmFsdWUpCisgICAgewor
ICAgICAgICBKU1ZhbHVlIHY7CisgICAgICAgIHYudS5hc0ludDY0ID0gZW5jb2RlZEpTVmFsdWU7
CisgICAgICAgIHJldHVybiB2OworICAgIH0KKworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAg
aW5saW5lIEpTVmFsdWU6OkpTVmFsdWUoKQorICAgIHsKKyAgICAgICAgdS5hc0JpdHMudGFnID0g
RW1wdHlWYWx1ZVRhZzsKKyAgICAgICAgdS5hc0JpdHMucGF5bG9hZCA9IDA7CisgICAgfQorCisg
ICAgaW5saW5lIEpTVmFsdWU6OkpTVmFsdWUoSlNOdWxsVGFnKQorICAgIHsKKyAgICAgICAgdS5h
c0JpdHMudGFnID0gTnVsbFRhZzsKKyAgICAgICAgdS5hc0JpdHMucGF5bG9hZCA9IDA7CisgICAg
fQorICAgIAorICAgIGlubGluZSBKU1ZhbHVlOjpKU1ZhbHVlKEpTVW5kZWZpbmVkVGFnKQorICAg
IHsKKyAgICAgICAgdS5hc0JpdHMudGFnID0gVW5kZWZpbmVkVGFnOworICAgICAgICB1LmFzQml0
cy5wYXlsb2FkID0gMDsKKyAgICB9CisgICAgCisgICAgaW5saW5lIEpTVmFsdWU6OkpTVmFsdWUo
SlNUcnVlVGFnKQorICAgIHsKKyAgICAgICAgdS5hc0JpdHMudGFnID0gQm9vbGVhblRhZzsKKyAg
ICAgICAgdS5hc0JpdHMucGF5bG9hZCA9IDE7CisgICAgfQorICAgIAorICAgIGlubGluZSBKU1Zh
bHVlOjpKU1ZhbHVlKEpTRmFsc2VUYWcpCisgICAgeworICAgICAgICB1LmFzQml0cy50YWcgPSBC
b29sZWFuVGFnOworICAgICAgICB1LmFzQml0cy5wYXlsb2FkID0gMDsKKyAgICB9CisKKyAgICBp
bmxpbmUgSlNWYWx1ZTo6SlNWYWx1ZShIYXNoVGFibGVEZWxldGVkVmFsdWVUYWcpCisgICAgewor
ICAgICAgICB1LmFzQml0cy50YWcgPSBEZWxldGVkVmFsdWVUYWc7CisgICAgICAgIHUuYXNCaXRz
LnBheWxvYWQgPSAwOworICAgIH0KKworICAgIGlubGluZSBKU1ZhbHVlOjpKU1ZhbHVlKEpTQ2Vs
bCogcHRyKQorICAgIHsKKyAgICAgICAgaWYgKHB0cikKKyAgICAgICAgICAgIHUuYXNCaXRzLnRh
ZyA9IENlbGxUYWc7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHUuYXNCaXRzLnRhZyA9IEVt
cHR5VmFsdWVUYWc7CisgICAgICAgIHUuYXNCaXRzLnBheWxvYWQgPSByZWludGVycHJldF9jYXN0
PGludDMyX3Q+KHB0cik7CisgICAgfQorCisgICAgaW5saW5lIEpTVmFsdWU6OkpTVmFsdWUoY29u
c3QgSlNDZWxsKiBwdHIpCisgICAgeworICAgICAgICBpZiAocHRyKQorICAgICAgICAgICAgdS5h
c0JpdHMudGFnID0gQ2VsbFRhZzsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdS5hc0JpdHMu
dGFnID0gRW1wdHlWYWx1ZVRhZzsKKyAgICAgICAgdS5hc0JpdHMucGF5bG9hZCA9IHJlaW50ZXJw
cmV0X2Nhc3Q8aW50MzJfdD4oY29uc3RfY2FzdDxKU0NlbGwqPihwdHIpKTsKKyAgICB9CisKKyAg
ICBpbmxpbmUgSlNWYWx1ZTo6b3BlcmF0b3IgYm9vbCgpIGNvbnN0CisgICAgeworICAgICAgICBB
U1NFUlQodGFnKCkgIT0gRGVsZXRlZFZhbHVlVGFnKTsKKyAgICAgICAgcmV0dXJuIHRhZygpICE9
IEVtcHR5VmFsdWVUYWc7CisgICAgfQorCisgICAgaW5saW5lIGJvb2wgSlNWYWx1ZTo6b3BlcmF0
b3I9PShjb25zdCBKU1ZhbHVlJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB1
LmFzSW50NjQgPT0gb3RoZXIudS5hc0ludDY0OworICAgIH0KKworICAgIGlubGluZSBib29sIEpT
VmFsdWU6Om9wZXJhdG9yIT0oY29uc3QgSlNWYWx1ZSYgb3RoZXIpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gdS5hc0ludDY0ICE9IG90aGVyLnUuYXNJbnQ2NDsKKyAgICB9CisKKyAgICBp
bmxpbmUgYm9vbCBKU1ZhbHVlOjppc0VtcHR5KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biB0YWcoKSA9PSBFbXB0eVZhbHVlVGFnOworICAgIH0KKworICAgIGlubGluZSBib29sIEpTVmFs
dWU6OmlzVW5kZWZpbmVkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0YWcoKSA9PSBV
bmRlZmluZWRUYWc7CisgICAgfQorCisgICAgaW5saW5lIGJvb2wgSlNWYWx1ZTo6aXNOdWxsKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0YWcoKSA9PSBOdWxsVGFnOworICAgIH0KKwor
ICAgIGlubGluZSBib29sIEpTVmFsdWU6OmlzVW5kZWZpbmVkT3JOdWxsKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBpc1VuZGVmaW5lZCgpIHx8IGlzTnVsbCgpOworICAgIH0KKworICAg
IGlubGluZSBib29sIEpTVmFsdWU6OmlzQ2VsbCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gdGFnKCkgPT0gQ2VsbFRhZzsKKyAgICB9CisKKyAgICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjpp
c0ludDMyKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0YWcoKSA9PSBJbnQzMlRhZzsK
KyAgICB9CisKKyAgICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjppc0RvdWJsZSgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gdGFnKCkgPCBMb3dlc3RUYWc7CisgICAgfQorCisgICAgaW5saW5l
IGJvb2wgSlNWYWx1ZTo6aXNUcnVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0YWco
KSA9PSBCb29sZWFuVGFnICYmIHBheWxvYWQoKTsKKyAgICB9CisKKyAgICBpbmxpbmUgYm9vbCBK
U1ZhbHVlOjppc0ZhbHNlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0YWcoKSA9PSBC
b29sZWFuVGFnICYmICFwYXlsb2FkKCk7CisgICAgfQorCisgICAgaW5saW5lIHVpbnQzMl90IEpT
VmFsdWU6OnRhZygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdS5hc0JpdHMudGFnOwor
ICAgIH0KKyAgICAKKyAgICBpbmxpbmUgaW50MzJfdCBKU1ZhbHVlOjpwYXlsb2FkKCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiB1LmFzQml0cy5wYXlsb2FkOworICAgIH0KKyAgICAKKyAg
ICBpbmxpbmUgaW50MzJfdCBKU1ZhbHVlOjphc0ludDMyKCkgY29uc3QKKyAgICB7CisgICAgICAg
IEFTU0VSVChpc0ludDMyKCkpOworICAgICAgICByZXR1cm4gdS5hc0JpdHMucGF5bG9hZDsKKyAg
ICB9CisgICAgCisgICAgaW5saW5lIGRvdWJsZSBKU1ZhbHVlOjphc0RvdWJsZSgpIGNvbnN0Cisg
ICAgeworICAgICAgICBBU1NFUlQoaXNEb3VibGUoKSk7CisgICAgICAgIHJldHVybiB1LmFzRG91
YmxlOworICAgIH0KKyAgICAKKyAgICBBTFdBWVNfSU5MSU5FIEpTQ2VsbCogSlNWYWx1ZTo6YXND
ZWxsKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0NlbGwoKSk7CisgICAgICAgIHJl
dHVybiByZWludGVycHJldF9jYXN0PEpTQ2VsbCo+KHUuYXNCaXRzLnBheWxvYWQpOworICAgIH0K
KworICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZTo6SlNWYWx1ZShFbmNvZGVBc0RvdWJsZVRhZywg
ZG91YmxlIGQpCisgICAgeworICAgICAgICB1LmFzRG91YmxlID0gZDsKKyAgICB9CisKKyAgICBp
bmxpbmUgSlNWYWx1ZTo6SlNWYWx1ZShpbnQgaSkKKyAgICB7CisgICAgICAgIHUuYXNCaXRzLnRh
ZyA9IEludDMyVGFnOworICAgICAgICB1LmFzQml0cy5wYXlsb2FkID0gaTsKKyAgICB9CisKKyNp
ZiBFTkFCTEUoTExJTlRfQ19MT09QKQorICAgIGlubGluZSBKU1ZhbHVlOjpKU1ZhbHVlKGludDMy
X3QgdGFnLCBpbnQzMl90IHBheWxvYWQpCisgICAgeworICAgICAgICB1LmFzQml0cy50YWcgPSB0
YWc7CisgICAgICAgIHUuYXNCaXRzLnBheWxvYWQgPSBwYXlsb2FkOworICAgIH0KKyNlbmRpZgor
CisgICAgaW5saW5lIGJvb2wgSlNWYWx1ZTo6aXNOdW1iZXIoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGlzSW50MzIoKSB8fCBpc0RvdWJsZSgpOworICAgIH0KKworICAgIGlubGluZSBi
b29sIEpTVmFsdWU6OmlzQm9vbGVhbigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNU
cnVlKCkgfHwgaXNGYWxzZSgpOworICAgIH0KKworICAgIGlubGluZSBib29sIEpTVmFsdWU6OmFz
Qm9vbGVhbigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNCb29sZWFuKCkpOworICAg
ICAgICByZXR1cm4gcGF5bG9hZCgpOworICAgIH0KKworI2Vsc2UgLy8gIVVTRShKU1ZBTFVFMzJf
NjQpIGkuZS4gVVNFKEpTVkFMVUU2NCkKKworICAgIC8vIDB4MCBjYW4gbmV2ZXIgb2NjdXIgbmF0
dXJhbGx5IGJlY2F1c2UgaXQgaGFzIGEgdGFnIG9mIDAwLCBpbmRpY2F0aW5nIGEgcG9pbnRlciB2
YWx1ZSwgYnV0IGEgcGF5bG9hZCBvZiAweDAsIHdoaWNoIGlzIGluIHRoZSAoaW52YWxpZCkgemVy
byBwYWdlLgorICAgIGlubGluZSBKU1ZhbHVlOjpKU1ZhbHVlKCkKKyAgICB7CisgICAgICAgIHUu
YXNJbnQ2NCA9IFZhbHVlRW1wdHk7CisgICAgfQorCisgICAgLy8gMHg0IGNhbiBuZXZlciBvY2N1
ciBuYXR1cmFsbHkgYmVjYXVzZSBpdCBoYXMgYSB0YWcgb2YgMDAsIGluZGljYXRpbmcgYSBwb2lu
dGVyIHZhbHVlLCBidXQgYSBwYXlsb2FkIG9mIDB4NCwgd2hpY2ggaXMgaW4gdGhlIChpbnZhbGlk
KSB6ZXJvIHBhZ2UuCisgICAgaW5saW5lIEpTVmFsdWU6OkpTVmFsdWUoSGFzaFRhYmxlRGVsZXRl
ZFZhbHVlVGFnKQorICAgIHsKKyAgICAgICAgdS5hc0ludDY0ID0gVmFsdWVEZWxldGVkOworICAg
IH0KKworICAgIGlubGluZSBKU1ZhbHVlOjpKU1ZhbHVlKEpTQ2VsbCogcHRyKQorICAgIHsKKyAg
ICAgICAgdS5hc0ludDY0ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHB0cik7CisgICAg
fQorCisgICAgaW5saW5lIEpTVmFsdWU6OkpTVmFsdWUoY29uc3QgSlNDZWxsKiBwdHIpCisgICAg
eworICAgICAgICB1LmFzSW50NjQgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oY29uc3Rf
Y2FzdDxKU0NlbGwqPihwdHIpKTsKKyAgICB9CisKKyAgICBpbmxpbmUgSlNWYWx1ZTo6b3BlcmF0
b3IgYm9vbCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdS5hc0ludDY0OworICAgIH0K
KworICAgIGlubGluZSBib29sIEpTVmFsdWU6Om9wZXJhdG9yPT0oY29uc3QgSlNWYWx1ZSYgb3Ro
ZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdS5hc0ludDY0ID09IG90aGVyLnUuYXNJ
bnQ2NDsKKyAgICB9CisKKyAgICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjpvcGVyYXRvciE9KGNvbnN0
IEpTVmFsdWUmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHUuYXNJbnQ2NCAh
PSBvdGhlci51LmFzSW50NjQ7CisgICAgfQorCisgICAgaW5saW5lIGJvb2wgSlNWYWx1ZTo6aXNF
bXB0eSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdS5hc0ludDY0ID09IFZhbHVlRW1w
dHk7CisgICAgfQorCisgICAgaW5saW5lIGJvb2wgSlNWYWx1ZTo6aXNVbmRlZmluZWQoKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIGFzVmFsdWUoKSA9PSBKU1ZhbHVlKEpTVW5kZWZpbmVk
KTsKKyAgICB9CisKKyAgICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjppc051bGwoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIGFzVmFsdWUoKSA9PSBKU1ZhbHVlKEpTTnVsbCk7CisgICAgfQor
CisgICAgaW5saW5lIGJvb2wgSlNWYWx1ZTo6aXNUcnVlKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBhc1ZhbHVlKCkgPT0gSlNWYWx1ZShKU1RydWUpOworICAgIH0KKworICAgIGlubGlu
ZSBib29sIEpTVmFsdWU6OmlzRmFsc2UoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGFz
VmFsdWUoKSA9PSBKU1ZhbHVlKEpTRmFsc2UpOworICAgIH0KKworICAgIGlubGluZSBib29sIEpT
VmFsdWU6OmFzQm9vbGVhbigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNCb29sZWFu
KCkpOworICAgICAgICByZXR1cm4gYXNWYWx1ZSgpID09IEpTVmFsdWUoSlNUcnVlKTsKKyAgICB9
CisKKyAgICBpbmxpbmUgaW50MzJfdCBKU1ZhbHVlOjphc0ludDMyKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChpc0ludDMyKCkpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50
MzJfdD4odS5hc0ludDY0KTsKKyAgICB9CisKKyAgICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjppc0Rv
dWJsZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNOdW1iZXIoKSAmJiAhaXNJbnQz
MigpOworICAgIH0KKworICAgIGlubGluZSBKU1ZhbHVlOjpKU1ZhbHVlKEpTTnVsbFRhZykKKyAg
ICB7CisgICAgICAgIHUuYXNJbnQ2NCA9IFZhbHVlTnVsbDsKKyAgICB9CisgICAgCisgICAgaW5s
aW5lIEpTVmFsdWU6OkpTVmFsdWUoSlNVbmRlZmluZWRUYWcpCisgICAgeworICAgICAgICB1LmFz
SW50NjQgPSBWYWx1ZVVuZGVmaW5lZDsKKyAgICB9CisKKyAgICBpbmxpbmUgSlNWYWx1ZTo6SlNW
YWx1ZShKU1RydWVUYWcpCisgICAgeworICAgICAgICB1LmFzSW50NjQgPSBWYWx1ZVRydWU7Cisg
ICAgfQorCisgICAgaW5saW5lIEpTVmFsdWU6OkpTVmFsdWUoSlNGYWxzZVRhZykKKyAgICB7Cisg
ICAgICAgIHUuYXNJbnQ2NCA9IFZhbHVlRmFsc2U7CisgICAgfQorCisgICAgaW5saW5lIGJvb2wg
SlNWYWx1ZTo6aXNVbmRlZmluZWRPck51bGwoKSBjb25zdAorICAgIHsKKyAgICAgICAgLy8gVW5k
ZWZpbmVkIGFuZCBudWxsIHNoYXJlIHRoZSBzYW1lIHZhbHVlLCBiYXIgdGhlICd1bmRlZmluZWQn
IGJpdCBpbiB0aGUgZXh0ZW5kZWQgdGFnLgorICAgICAgICByZXR1cm4gKHUuYXNJbnQ2NCAmIH5U
YWdCaXRVbmRlZmluZWQpID09IFZhbHVlTnVsbDsKKyAgICB9CisKKyAgICBpbmxpbmUgYm9vbCBK
U1ZhbHVlOjppc0Jvb2xlYW4oKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICh1LmFzSW50
NjQgJiB+MSkgPT0gVmFsdWVGYWxzZTsKKyAgICB9CisKKyAgICBpbmxpbmUgYm9vbCBKU1ZhbHVl
Ojppc0NlbGwoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEodS5hc0ludDY0ICYgVGFn
TWFzayk7CisgICAgfQorCisgICAgaW5saW5lIGJvb2wgSlNWYWx1ZTo6aXNJbnQzMigpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gKHUuYXNJbnQ2NCAmIFRhZ1R5cGVOdW1iZXIpID09IFRh
Z1R5cGVOdW1iZXI7CisgICAgfQorCisgICAgaW5saW5lIGludDY0X3QgcmVpbnRlcnByZXREb3Vi
bGVUb0ludDY0KGRvdWJsZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nh
c3Q8aW50NjRfdD4odmFsdWUpOworICAgIH0KKyAgICBpbmxpbmUgZG91YmxlIHJlaW50ZXJwcmV0
SW50NjRUb0RvdWJsZShpbnQ2NF90IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJpdHdp
c2VfY2FzdDxkb3VibGU+KHZhbHVlKTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIEpTVmFs
dWU6OkpTVmFsdWUoRW5jb2RlQXNEb3VibGVUYWcsIGRvdWJsZSBkKQorICAgIHsKKyAgICAgICAg
dS5hc0ludDY0ID0gcmVpbnRlcnByZXREb3VibGVUb0ludDY0KGQpICsgRG91YmxlRW5jb2RlT2Zm
c2V0OworICAgIH0KKworICAgIGlubGluZSBKU1ZhbHVlOjpKU1ZhbHVlKGludCBpKQorICAgIHsK
KyAgICAgICAgdS5hc0ludDY0ID0gVGFnVHlwZU51bWJlciB8IHN0YXRpY19jYXN0PHVpbnQzMl90
PihpKTsKKyAgICB9CisKKyAgICBpbmxpbmUgZG91YmxlIEpTVmFsdWU6OmFzRG91YmxlKCkgY29u
c3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0RvdWJsZSgpKTsKKyAgICAgICAgcmV0dXJuIHJl
aW50ZXJwcmV0SW50NjRUb0RvdWJsZSh1LmFzSW50NjQgLSBEb3VibGVFbmNvZGVPZmZzZXQpOwor
ICAgIH0KKworICAgIGlubGluZSBib29sIEpTVmFsdWU6OmlzTnVtYmVyKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiB1LmFzSW50NjQgJiBUYWdUeXBlTnVtYmVyOworICAgIH0KKworICAg
IEFMV0FZU19JTkxJTkUgSlNDZWxsKiBKU1ZhbHVlOjphc0NlbGwoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgQVNTRVJUKGlzQ2VsbCgpKTsKKyAgICAgICAgcmV0dXJuIHUucHRyOworICAgIH0KKwor
I2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpCisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYg
Ly8gSlNWYWx1ZUlubGluZU1ldGhvZHNfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNWYWx1ZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1ZhbHVlSW5saW5lcy5oCShyZXZpc2lvbiAxMzM5NTUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yMyw4ICsyMyw4IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVmIEpTVmFsdWVJ
bmxpbmVNZXRob2RzX2gKLSNkZWZpbmUgSlNWYWx1ZUlubGluZU1ldGhvZHNfaAorI2lmbmRlZiBK
U1ZhbHVlSW5saW5lc19oCisjZGVmaW5lIEpTVmFsdWVJbmxpbmVzX2gKIAogI2luY2x1ZGUgIkpT
VmFsdWUuaCIKIApAQCAtNDkzLDQgKzQ5Myw1IEBAIG5hbWVzcGFjZSBKU0MgewogCiB9IC8vIG5h
bWVzcGFjZSBKU0MKIAotI2VuZGlmIC8vIEpTVmFsdWVJbmxpbmVNZXRob2RzX2gKKyNlbmRpZiAv
LyBKU1ZhbHVlSW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0xpdGVyYWxQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0xpdGVyYWxQYXJzZXIuY3BwCShyZXZpc2lvbiAxMzM5NzMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9MaXRlcmFsUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjcsOCArMjcsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkxpdGVyYWxQYXJz
ZXIuaCIKIAotI2luY2x1ZGUgIkJ1dHRlcmZseUlubGluZU1ldGhvZHMuaCIKLSNpbmNsdWRlICJD
b3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJCdXR0ZXJmbHlJbmxpbmVzLmgi
CisjaW5jbHVkZSAiQ29waWVkU3BhY2VJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNBcnJheS5oIgog
I2luY2x1ZGUgIkpTU3RyaW5nLmgiCiAjaW5jbHVkZSAiTGV4ZXIuaCIKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHAJKHJl
dmlzaW9uIDEzMzk3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdENv
bnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEsOCArMjEsOCBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgiCiAKLSNpbmNsdWRlICJC
dXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgiCi0jaW5jbHVkZSAiQ29waWVkU3BhY2VJbmxpbmVNZXRo
b2RzLmgiCisjaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lcy5oIgorI2luY2x1ZGUgIkNvcGllZFNw
YWNlSW5saW5lcy5oIgogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uSGVs
cGVycy5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL09wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9PcGVyYXRpb25zLmgJKHJldmlzaW9uIDEzMzk3MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjYs
NyArMjYsNyBAQAogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCiAjaW5jbHVkZSAiSlNQcm94eS5o
IgogI2luY2x1ZGUgIkpTU3RyaW5nLmgiCi0jaW5jbHVkZSAiSlNWYWx1ZUlubGluZU1ldGhvZHMu
aCIKKyNpbmNsdWRlICJKU1ZhbHVlSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBNYXRjaGVz
QXJyYXkuY3BwCShyZXZpc2lvbiAxMzM5NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9SZWdFeHBNYXRjaGVzQXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUmVnRXhwTWF0Y2hlc0FycmF5Lmgi
CiAKLSNpbmNsdWRlICJCdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiQnV0dGVy
Zmx5SW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuY3BwCShyZXZpc2lvbiAxMzM5NzMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMSw4ICsyMSw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
UmVnRXhwT2JqZWN0LmgiCiAKLSNpbmNsdWRlICJCdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgiCi0j
aW5jbHVkZSAiQ29waWVkU3BhY2VJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiQnV0dGVyZmx5
SW5saW5lcy5oIgorI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lcy5oIgogI2luY2x1ZGUgIkVy
cm9yLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uSGVscGVycy5oIgogI2luY2x1ZGUgIkpTQXJyYXku
aCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJv
dG90eXBlLmNwcAkocmV2aXNpb24gMTMzOTczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsOSArMjIsOSBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlN0cmluZ1Byb3RvdHlwZS5oIgogCi0j
aW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkJ1dHRlcmZseUlu
bGluZXMuaCIKICNpbmNsdWRlICJDYWNoZWRDYWxsLmgiCi0jaW5jbHVkZSAiQ29waWVkU3BhY2VJ
bmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiQ29waWVkU3BhY2VJbmxpbmVzLmgiCiAjaW5jbHVk
ZSAiRXJyb3IuaCIKICNpbmNsdWRlICJFeGVjdXRhYmxlLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxP
YmplY3RGdW5jdGlvbnMuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMzk3MykKKysrIFNv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMxIEBACisy
MDEyLTExLTA4ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBSZW5h
bWVkIC4uLklubGluZU1ldGhvZHMuaCBmaWxlcyB0byAuLi5JbmxpbmVzLmguCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDExNDUuCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBpcyBvbmx5IGEgcmVm
YWN0b3JpbmcgZWZmb3J0IHRvIHJlbmFtZSB0aGUgZmlsZXMuIFRoZXJlIGFyZSBubworICAgICAg
ICBmdW5jdGlvbmFsaXR5IGNoYW5nZXMuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLgorCisgICAg
ICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAg
ICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJv
ajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAg
ICogaHRtbC9wYXJzZXIvSFRNTEVudGl0eVBhcnNlci5jcHA6CisgICAgICAgICogaHRtbC9wYXJz
ZXIvSFRNTFRva2VuaXplci5jcHA6CisgICAgICAgICogaHRtbC90cmFjay9XZWJWVFRUb2tlbml6
ZXIuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9MYXlvdXRUeXBlc0lubGluZXMuaDogQ29waWVk
IGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFR5cGVzSW5saW5lTWV0aG9kcy5o
LgorICAgICAgICAqIHhtbC9wYXJzZXIvQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VySW5saW5lTWV0
aG9kcy5oOiBSZW1vdmVkLgorICAgICAgICAqIHhtbC9wYXJzZXIvQ2hhcmFjdGVyUmVmZXJlbmNl
UGFyc2VySW5saW5lcy5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL0No
YXJhY3RlclJlZmVyZW5jZVBhcnNlcklubGluZU1ldGhvZHMuaC4KKyAgICAgICAgKiB4bWwvcGFy
c2VyL01hcmt1cFRva2VuaXplcklubGluZU1ldGhvZHMuaDogUmVtb3ZlZC4KKyAgICAgICAgKiB4
bWwvcGFyc2VyL01hcmt1cFRva2VuaXplcklubGluZXMuaDogQ29waWVkIGZyb20gU291cmNlL1dl
YkNvcmUveG1sL3BhcnNlci9NYXJrdXBUb2tlbml6ZXJJbmxpbmVNZXRob2RzLmguCisgICAgICAg
ICogeG1sL3BhcnNlci9YTUxDaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXIuY3BwOgorICAgICAgICAq
IHhtbC9wYXJzZXIvWE1MVG9rZW5pemVyLmNwcDoKKwogMjAxMi0xMS0wOCAgQWxwaGEgTGFtICA8
aGNsYW1AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gRGVmZXJyZWQgaW1hZ2Ug
ZGVjb2RpbmcgZmFpbHMgd2l0aCBpbWFnZSBvcmllbnRhdGlvbgpJbmRleDogU291cmNlL1dlYkNv
cmUvR05VbWFrZWZpbGUubGlzdC5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9HTlVt
YWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiAxMzM5NzMpCisrKyBTb3VyY2UvV2ViQ29yZS9HTlVt
YWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC01ODI0LDEwICs1ODI0LDEwIEBAIHdl
YmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJTY3JpcHRM
b2FkZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJUaHJlYWQuY3BwIFwKIAlT
b3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlclRocmVhZC5oIFwKLQlTb3VyY2UvV2ViQ29yZS94
bWwvcGFyc2VyL0NoYXJhY3RlclJlZmVyZW5jZVBhcnNlcklubGluZU1ldGhvZHMuaCBcCisJU291
cmNlL1dlYkNvcmUveG1sL3BhcnNlci9DaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXJJbmxpbmVzLmgg
XAogCVNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvTWFya3VwVG9rZW5CYXNlLmggXAogCVNvdXJj
ZS9XZWJDb3JlL3htbC9wYXJzZXIvTWFya3VwVG9rZW5pemVyQmFzZS5oIFwKLQlTb3VyY2UvV2Vi
Q29yZS94bWwvcGFyc2VyL01hcmt1cFRva2VuaXplcklubGluZU1ldGhvZHMuaCBcCisJU291cmNl
L1dlYkNvcmUveG1sL3BhcnNlci9NYXJrdXBUb2tlbml6ZXJJbmxpbmVzLmggXAogCVNvdXJjZS9X
ZWJDb3JlL3htbC9wYXJzZXIvTmV3WE1MRG9jdW1lbnRQYXJzZXIuY3BwIFwKIAlTb3VyY2UvV2Vi
Q29yZS94bWwvcGFyc2VyL05ld1hNTERvY3VtZW50UGFyc2VyLmggXAogCVNvdXJjZS9XZWJDb3Jl
L3htbC9wYXJzZXIvWE1MQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VyLmNwcCBcCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9UYXJnZXQucHJpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1Rhcmdl
dC5wcmkJKHJldmlzaW9uIDEzMzk3MykKKysrIFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkJKHdv
cmtpbmcgY29weSkKQEAgLTI3MzYsMTAgKzI3MzYsMTAgQEAgSEVBREVSUyArPSBcCiAgICAgd29y
a2Vycy9Xb3JrZXJSdW5Mb29wLmggXAogICAgIHdvcmtlcnMvV29ya2VyU2NyaXB0TG9hZGVyLmgg
XAogICAgIHdvcmtlcnMvV29ya2VyVGhyZWFkLmggXAotICAgIHhtbC9wYXJzZXIvQ2hhcmFjdGVy
UmVmZXJlbmNlUGFyc2VySW5saW5lTWV0aG9kcy5oIFwKKyAgICB4bWwvcGFyc2VyL0NoYXJhY3Rl
clJlZmVyZW5jZVBhcnNlcklubGluZXMuaCBcCiAgICAgeG1sL3BhcnNlci9NYXJrdXBUb2tlbkJh
c2UuaCBcCiAgICAgeG1sL3BhcnNlci9NYXJrdXBUb2tlbml6ZXJCYXNlLmggXAotICAgIHhtbC9w
YXJzZXIvTWFya3VwVG9rZW5pemVySW5saW5lTWV0aG9kcy5oIFwKKyAgICB4bWwvcGFyc2VyL01h
cmt1cFRva2VuaXplcklubGluZXMuaCBcCiAgICAgeG1sL3BhcnNlci9OZXdYTUxEb2N1bWVudFBh
cnNlci5oIFwKICAgICB4bWwvcGFyc2VyL1hNTENoYXJhY3RlclJlZmVyZW5jZVBhcnNlci5oIFwK
ICAgICB4bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyLmggXApJbmRleDogU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQkocmV2aXNpb24gMTMzOTczKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNjcwLDEwICszNjcwLDEwIEBACiAgICAgICAgICAgICAnd29ya2Vycy9X
b3JrZXJTY3JpcHRMb2FkZXIuaCcsCiAgICAgICAgICAgICAnd29ya2Vycy9Xb3JrZXJTY3JpcHRM
b2FkZXJDbGllbnQuaCcsCiAgICAgICAgICAgICAnd29ya2Vycy9Xb3JrZXJUaHJlYWQuY3BwJywK
LSAgICAgICAgICAgICd4bWwvcGFyc2VyL0NoYXJhY3RlclJlZmVyZW5jZVBhcnNlcklubGluZU1l
dGhvZHMuaCcsCisgICAgICAgICAgICAneG1sL3BhcnNlci9DaGFyYWN0ZXJSZWZlcmVuY2VQYXJz
ZXJJbmxpbmVzLmgnLAogICAgICAgICAgICAgJ3htbC9wYXJzZXIvTWFya3VwVG9rZW5CYXNlLmgn
LAogICAgICAgICAgICAgJ3htbC9wYXJzZXIvTWFya3VwVG9rZW5pemVyQmFzZS5oJywKLSAgICAg
ICAgICAgICd4bWwvcGFyc2VyL01hcmt1cFRva2VuaXplcklubGluZU1ldGhvZHMuaCcsCisgICAg
ICAgICAgICAneG1sL3BhcnNlci9NYXJrdXBUb2tlbml6ZXJJbmxpbmVzLmgnLAogICAgICAgICAg
ICAgJ3htbC9wYXJzZXIvTmV3WE1MRG9jdW1lbnRQYXJzZXIuY3BwJywKICAgICAgICAgICAgICd4
bWwvcGFyc2VyL05ld1hNTERvY3VtZW50UGFyc2VyLmgnLAogICAgICAgICAgICAgJ3htbC9wYXJz
ZXIvWE1MQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VyLmNwcCcsCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24gMTMzOTczKQorKysg
U291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29w
eSkKQEAgLTQ4Mzk4LDcgKzQ4Mzk4LDcgQEAKIAkJCQlOYW1lPSJwYXJzZXIiCiAJCQkJPgogCQkJ
CTxGaWxlCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5ceG1sXHBhcnNlclxDaGFyYWN0ZXJSZWZlcmVu
Y2VJbmxpbmVNZXRob2RzLmgiCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ceG1sXHBhcnNlclxDaGFy
YWN0ZXJSZWZlcmVuY2VJbmxpbmVzLmgiCiAJCQkJCT4KIAkJCQk8L0ZpbGU+CiAJCQkJPEZpbGUK
QEAgLTQ4NDEwLDcgKzQ4NDEwLDcgQEAKIAkJCQkJPgogCQkJCTwvRmlsZT4KIAkJCQk8RmlsZQot
CQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHhtbFxwYXJzZXJcTWFya3VwVG9rZW5pemVySW5saW5lTWV0
aG9kcy5oIgorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHhtbFxwYXJzZXJcTWFya3VwVG9rZW5pemVy
SW5saW5lcy5oIgogCQkJCQk+CiAJCQkJPC9GaWxlPgogCQkJCTxGaWxlCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biAxMzM5NzMpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAKIC8qIEVuZCBQQlhBZ2dyZWdh
dGVUYXJnZXQgc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLwot
CQkwMDAyMkU2OTEzQ0UxQkJBMDAyODJENUIgLyogQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VySW5s
aW5lTWV0aG9kcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMDAwMjJFNjgxM0NFMUJCQTAwMjgyRDVCIC8qIENoYXJhY3RlclJlZmVyZW5jZVBhcnNlcklu
bGluZU1ldGhvZHMuaCAqLzsgfTsKKwkJMDAwMjJFNjkxM0NFMUJCQTAwMjgyRDVCIC8qIENoYXJh
Y3RlclJlZmVyZW5jZVBhcnNlcklubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDAwMDIyRTY4MTNDRTFCQkEwMDI4MkQ1QiAvKiBDaGFyYWN0ZXJS
ZWZlcmVuY2VQYXJzZXJJbmxpbmVzLmggKi87IH07CiAJCTAwMDJFQzU4MTNDM0Y2N0QwMDA0MEQ0
NyAvKiBYTUxUb2tlbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMDAwMkVDNTUxM0MzRjY3RDAwMDQwRDQ3IC8qIFhNTFRva2VuLmggKi87IH07CiAJCTAw
MDJFQzU5MTNDM0Y2N0QwMDA0MEQ0NyAvKiBYTUxUb2tlbml6ZXIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDAwMkVDNTYxM0MzRjY3RDAwMDQwRDQ3
IC8qIFhNTFRva2VuaXplci5jcHAgKi87IH07CiAJCTAwMDJFQzVBMTNDM0Y2N0QwMDA0MEQ0NyAv
KiBYTUxUb2tlbml6ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDAwMDJFQzU3MTNDM0Y2N0QwMDA0MEQ0NyAvKiBYTUxUb2tlbml6ZXIuaCAqLzsgfTsK
QEAgLTYwLDcgKzYwLDcgQEAKIAkJMDBCOTMxODkxM0JBOERCQzAwMzVBOTQ4IC8qIFhNTERvY3Vt
ZW50UGFyc2VyTGlieG1sMi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwMEI5MzE4MzEzQkE4NjdGMDAzNUE5NDggLyogWE1MRG9jdW1lbnRQYXJzZXJM
aWJ4bWwyLmNwcCAqLzsgfTsKIAkJMDBCOTMxOEIxM0JBOERDOTAwMzVBOTQ4IC8qIFhNTERvY3Vt
ZW50UGFyc2VyU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMDBCOTMxODUxM0JBODY3RjAwMzVBOTQ4IC8qIFhNTERvY3VtZW50UGFyc2VyU2Nv
cGUuY3BwICovOyB9OwogCQkwMEI5MzE4QzEzQkE4RENDMDAzNUE5NDggLyogWE1MRG9jdW1lbnRQ
YXJzZXJTY29wZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMDBCOTMxODYxM0JBODY3RjAwMzVBOTQ4IC8qIFhNTERvY3VtZW50UGFyc2VyU2NvcGUuaCAq
LzsgfTsKLQkJMDBDNjBFM0YxM0Q3NkQ3RTAwOTJBMjc1IC8qIE1hcmt1cFRva2VuaXplcklubGlu
ZU1ldGhvZHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDAwQzYwRTNFMTNENzZEN0UwMDkyQTI3NSAvKiBNYXJrdXBUb2tlbml6ZXJJbmxpbmVNZXRob2Rz
LmggKi87IH07CisJCTAwQzYwRTNGMTNENzZEN0UwMDkyQTI3NSAvKiBNYXJrdXBUb2tlbml6ZXJJ
bmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
MEM2MEUzRTEzRDc2RDdFMDA5MkEyNzUgLyogTWFya3VwVG9rZW5pemVySW5saW5lcy5oICovOyB9
OwogCQkwMEM2MEU0MjEzRDc5N0FFMDA5MkEyNzUgLyogTWFya3VwVG9rZW5pemVyQmFzZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDBDNjBFNDExM0Q3
OTdBRTAwOTJBMjc1IC8qIE1hcmt1cFRva2VuaXplckJhc2UuaCAqLzsgfTsKIAkJMDBDQTkzQjIx
M0M2NjkxNjAwRjdGRTk1IC8qIE5ld1hNTERvY3VtZW50UGFyc2VyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwMENBOTNCMTEzQzY2OTE2MDBGN0ZFOTUg
LyogTmV3WE1MRG9jdW1lbnRQYXJzZXIuaCAqLzsgfTsKIAkJMDBDQTkzQjUxM0M2Njk3QzAwRjdG
RTk1IC8qIE5ld1hNTERvY3VtZW50UGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDAwQ0E5M0I0MTNDNjY5N0MwMEY3RkU5NSAvKiBOZXdYTUxE
b2N1bWVudFBhcnNlci5jcHAgKi87IH07CkBAIC03MDk0LDcgKzcwOTQsNyBAQAogLyogRW5kIFBC
WENvcHlGaWxlc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhGaWxlUmVmZXJl
bmNlIHNlY3Rpb24gKi8KLQkJMDAwMjJFNjgxM0NFMUJCQTAwMjgyRDVCIC8qIENoYXJhY3RlclJl
ZmVyZW5jZVBhcnNlcklubGluZU1ldGhvZHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VySW5saW5lTWV0aG9kcy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwMDAyMkU2ODEzQ0UxQkJBMDAyODJENUIgLyogQ2hhcmFjdGVy
UmVmZXJlbmNlUGFyc2VySW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBDaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXJJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTAwMDJFQzU1MTNDM0Y2N0QwMDA0MEQ0NyAvKiBYTUxUb2tlbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBYTUxUb2tlbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwMDAyRUM1NjEzQzNGNjdEMDAwNDBENDcgLyogWE1MVG9rZW5pemVyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFhNTFRva2VuaXplci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTAwMDJFQzU3MTNDM0Y2N0QwMDA0MEQ0NyAvKiBY
TUxUb2tlbml6ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWE1MVG9rZW5p
emVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03MTA5LDcgKzcxMDksNyBAQAog
CQkwMEI5MzE4MzEzQkE4NjdGMDAzNUE5NDggLyogWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFhNTERvY3VtZW50UGFyc2Vy
TGlieG1sMi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTAwQjkzMTg1MTNCQTg2
N0YwMDM1QTk0OCAvKiBYTUxEb2N1bWVudFBhcnNlclNjb3BlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFhNTERvY3VtZW50UGFyc2VyU2NvcGUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwMEI5MzE4NjEzQkE4NjdGMDAzNUE5NDggLyogWE1MRG9j
dW1lbnRQYXJzZXJTY29wZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBYTUxE
b2N1bWVudFBhcnNlclNjb3BlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTAwQzYw
RTNFMTNENzZEN0UwMDkyQTI3NSAvKiBNYXJrdXBUb2tlbml6ZXJJbmxpbmVNZXRob2RzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hcmt1cFRva2VuaXplcklubGluZU1ldGhv
ZHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMDBDNjBFM0UxM0Q3NkQ3RTAwOTJB
Mjc1IC8qIE1hcmt1cFRva2VuaXplcklubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTWFya3VwVG9rZW5pemVySW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwMEM2MEU0MTEzRDc5N0FFMDA5MkEyNzUgLyogTWFya3VwVG9rZW5pemVyQmFzZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYXJrdXBUb2tlbml6ZXJCYXNlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTAwQ0E5M0IxMTNDNjY5MTYwMEY3RkU5NSAv
KiBOZXdYTUxEb2N1bWVudFBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBOZXdYTUxEb2N1bWVudFBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
MENBOTNCNDEzQzY2OTdDMDBGN0ZFOTUgLyogTmV3WE1MRG9jdW1lbnRQYXJzZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTmV3WE1MRG9jdW1lbnRQYXJzZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTQxMzksMTAgKzE0MTM5LDEwIEBACiAJ
CTAwQjkzMTgwMTNCQTg2N0YwMDM1QTk0OCAvKiBwYXJzZXIgKi8gPSB7CiAJCQlpc2EgPSBQQlhH
cm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTAwMDIyRTY4MTNDRTFCQkEwMDI4MkQ1QiAvKiBD
aGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXJJbmxpbmVNZXRob2RzLmggKi8sCisJCQkJMDAwMjJFNjgx
M0NFMUJCQTAwMjgyRDVCIC8qIENoYXJhY3RlclJlZmVyZW5jZVBhcnNlcklubGluZXMuaCAqLywK
IAkJCQkwMEE2MjlDMDEzRDBCRUM3MDA1MEFDNTIgLyogTWFya3VwVG9rZW5CYXNlLmggKi8sCiAJ
CQkJMDBDNjBFNDExM0Q3OTdBRTAwOTJBMjc1IC8qIE1hcmt1cFRva2VuaXplckJhc2UuaCAqLywK
LQkJCQkwMEM2MEUzRTEzRDc2RDdFMDA5MkEyNzUgLyogTWFya3VwVG9rZW5pemVySW5saW5lTWV0
aG9kcy5oICovLAorCQkJCTAwQzYwRTNFMTNENzZEN0UwMDkyQTI3NSAvKiBNYXJrdXBUb2tlbml6
ZXJJbmxpbmVzLmggKi8sCiAJCQkJMDBDQTkzQjQxM0M2Njk3QzAwRjdGRTk1IC8qIE5ld1hNTERv
Y3VtZW50UGFyc2VyLmNwcCAqLywKIAkJCQkwMENBOTNCMTEzQzY2OTE2MDBGN0ZFOTUgLyogTmV3
WE1MRG9jdW1lbnRQYXJzZXIuaCAqLywKIAkJCQkwMEQwNDY0ODEzQzREMTQ1MDAzMjZGQ0MgLyog
WE1MQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VyLmNwcCAqLywKQEAgLTIyNTY4LDcgKzIyNTY4LDcg
QEAKIAkJCQlGRDMxNUZGRjEyQjAyNjc2MDBDMUEzNTkgLyogQ2hhbm5lbE1lcmdlck5vZGUuaCBp
biBIZWFkZXJzICovLAogCQkJCUZEMzE2MDAyMTJCMDI2NzYwMEMxQTM1OSAvKiBDaGFubmVsU3Bs
aXR0ZXJOb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQk2NTUwQjZBMDA5OURGMDI3MDA5MEQ3ODEg
LyogQ2hhcmFjdGVyRGF0YS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMDAwMjJFNjkxM0NFMUJCQTAw
MjgyRDVCIC8qIENoYXJhY3RlclJlZmVyZW5jZVBhcnNlcklubGluZU1ldGhvZHMuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTAwMDIyRTY5MTNDRTFCQkEwMDI4MkQ1QiAvKiBDaGFyYWN0ZXJSZWZlcmVu
Y2VQYXJzZXJJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkMzREEyQTBEMDA2QzFEMDBF
RjZGMjYgLyogQ2hhcnNldERhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUY1NUIzREIyMTI1MUYx
MkQwMDNFRjI2OSAvKiBDaGVja2JveElucHV0VHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTAw
QjcyMUExMURFNjQyODAwOEFCOUZGIC8qIENoZWNrZWRJbnQuaCBpbiBIZWFkZXJzICovLApAQCAt
MjQ1MjQsNyArMjQ1MjQsNyBAQAogCQkJCTk3MjhDMzE0MTI2OEU0MzkwMDQxRTg5QiAvKiBNYXJr
dXBBY2N1bXVsYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDBBNjI5QzExM0QwQkVDNzAwNTBB
QzUyIC8qIE1hcmt1cFRva2VuQmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDBDNjBFNDIxM0Q3
OTdBRTAwOTJBMjc1IC8qIE1hcmt1cFRva2VuaXplckJhc2UuaCBpbiBIZWFkZXJzICovLAotCQkJ
CTAwQzYwRTNGMTNENzZEN0UwMDkyQTI3NSAvKiBNYXJrdXBUb2tlbml6ZXJJbmxpbmVNZXRob2Rz
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwMEM2MEUzRjEzRDc2RDdFMDA5MkEyNzUgLyogTWFya3Vw
VG9rZW5pemVySW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkFCRTcyRjUxMDU5QzFFQjAw
RDk5OUREIC8qIE1hdGhNTEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ0QTI4QUFDMTJE
RkI4QUMwMEFFOTIzQiAvKiBNYXRoTUxFbGVtZW50RmFjdG9yeS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJRkFCRTcyRjcxMDU5QzFFQjAwRDk5OUREIC8qIE1hdGhNTElubGluZUNvbnRhaW5lckVsZW1l
bnQuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRN
TEVudGl0eVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9wYXJz
ZXIvSFRNTEVudGl0eVBhcnNlci5jcHAJKHJldmlzaW9uIDEzMzk3MykKKysrIFNvdXJjZS9XZWJD
b3JlL2h0bWwvcGFyc2VyL0hUTUxFbnRpdHlQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
OCw3ICsyOCw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSFRNTEVudGl0eVBh
cnNlci5oIgogCi0jaW5jbHVkZSAiQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VySW5saW5lTWV0aG9k
cy5oIgorI2luY2x1ZGUgIkNoYXJhY3RlclJlZmVyZW5jZVBhcnNlcklubGluZXMuaCIKICNpbmNs
dWRlICJIVE1MRW50aXR5U2VhcmNoLmgiCiAjaW5jbHVkZSAiSFRNTEVudGl0eVRhYmxlLmgiCiAj
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgpJbmRleDogU291cmNlL1dlYkNvcmUv
aHRtbC9wYXJzZXIvSFRNTFRva2VuaXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9wYXJzZXIvSFRNTFRva2VuaXplci5jcHAJKHJldmlzaW9uIDEzMzk3MykKKysrIFNv
dXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUb2tlbml6ZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMiw3ICszMiw3IEBACiAjaW5jbHVkZSAiSFRNTFRva2VuLmgiCiAjaW5jbHVkZSAiSFRN
TFRyZWVCdWlsZGVyLmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiTWFya3Vw
VG9rZW5pemVySW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIk1hcmt1cFRva2VuaXplcklubGlu
ZXMuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgPHd0Zi9BU0NJSUNU
eXBlLmg+CiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL3RyYWNrL1dlYlZUVFRva2VuaXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC90cmFjay9XZWJWVFRUb2tlbml6ZXIuY3BwCShyZXZpc2lvbiAxMzM5NzMpCisr
KyBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1dlYlZUVFRva2VuaXplci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM0LDcgKzM0LDcgQEAKIAogI2luY2x1ZGUgIldlYlZUVFRva2VuaXplci5oIgog
Ci0jaW5jbHVkZSAiTWFya3VwVG9rZW5pemVySW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIk1h
cmt1cFRva2VuaXplcklubGluZXMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0VHlwZXNJbmxpbmVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFR5cGVzSW5saW5lcy5oCShyZXZpc2lv
biAxMzMzODkpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRUeXBlc0lubGlu
ZU1ldGhvZHMuaDoxMzMzODkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0VHlw
ZXNJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9MYXlvdXRUeXBlc0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvTGF5b3V0VHlwZXNJbmxpbmVzLmgJKHJldmlzaW9uIDEzMzM4OSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRUeXBlc0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
MjgsOCArMjgsOCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIExheW91dFR5cGVz
SW5saW5lTWV0aG9kc19oCi0jZGVmaW5lIExheW91dFR5cGVzSW5saW5lTWV0aG9kc19oCisjaWZu
ZGVmIExheW91dFR5cGVzSW5saW5lc19oCisjZGVmaW5lIExheW91dFR5cGVzSW5saW5lc19oCiAK
ICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJGcmFjdGlvbmFsTGF5b3V0Qm94RXh0
ZW50LmgiCkBAIC0xNTAsNCArMTUwLDQgQEAgaW5saW5lIGJvb2wgaXNJbnRlZ2VyVmFsdWUoY29u
c3QgTGF5b3V0VQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBMYXlvdXRU
eXBlc0lubGluZU1ldGhvZHNfaAorI2VuZGlmIC8vIExheW91dFR5cGVzSW5saW5lc19oCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL0NoYXJhY3RlclJlZmVyZW5jZVBhcnNlcklubGlu
ZU1ldGhvZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL0NoYXJh
Y3RlclJlZmVyZW5jZVBhcnNlcklubGluZU1ldGhvZHMuaAkocmV2aXNpb24gMTMzOTczKQorKysg
U291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9DaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXJJbmxpbmVN
ZXRob2RzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTczICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEwIEdvb2dsZSwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBDaGFyYWN0ZXJSZWZlcmVu
Y2VQYXJzZXJJbmxpbmVNZXRob2RzX2gKLSNkZWZpbmUgQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2Vy
SW5saW5lTWV0aG9kc19oCi0KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotaW5saW5lIGJvb2wgaXNIZXhEaWdpdChVQ2hhciBjYykK
LXsKLSAgICByZXR1cm4gKGNjID49ICcwJyAmJiBjYyA8PSAnOScpIHx8IChjYyA+PSAnYScgJiYg
Y2MgPD0gJ2YnKSB8fCAoY2MgPj0gJ0EnICYmIGNjIDw9ICdGJyk7Ci19Ci0KLWlubGluZSB2b2lk
IHVuY29uc3VtZUNoYXJhY3RlcnMoU2VnbWVudGVkU3RyaW5nJiBzb3VyY2UsIGNvbnN0IFN0cmlu
Z0J1aWxkZXImIGNvbnN1bWVkQ2hhcmFjdGVycykKLXsKLSAgICBpZiAoY29uc3VtZWRDaGFyYWN0
ZXJzLmxlbmd0aCgpID09IDEpCi0gICAgICAgIHNvdXJjZS5wdXNoKGNvbnN1bWVkQ2hhcmFjdGVy
c1swXSk7Ci0gICAgZWxzZSBpZiAoY29uc3VtZWRDaGFyYWN0ZXJzLmxlbmd0aCgpID09IDIpIHsK
LSAgICAgICAgc291cmNlLnB1c2goY29uc3VtZWRDaGFyYWN0ZXJzWzBdKTsKLSAgICAgICAgc291
cmNlLnB1c2goY29uc3VtZWRDaGFyYWN0ZXJzWzFdKTsKLSAgICB9IGVsc2UKLSAgICAgICAgc291
cmNlLnByZXBlbmQoU2VnbWVudGVkU3RyaW5nKFN0cmluZyhjb25zdW1lZENoYXJhY3RlcnMuY2hh
cmFjdGVycygpLCBjb25zdW1lZENoYXJhY3RlcnMubGVuZ3RoKCkpKSk7Ci19Ci0KLXRlbXBsYXRl
IDx0eXBlbmFtZSBQYXJzZXJGdW5jdGlvbnM+Ci1ib29sIGNvbnN1bWVDaGFyYWN0ZXJSZWZlcmVu
Y2UoU2VnbWVudGVkU3RyaW5nJiBzb3VyY2UsIFN0cmluZ0J1aWxkZXImIGRlY29kZWRDaGFyYWN0
ZXIsIGJvb2wmIG5vdEVub3VnaENoYXJhY3RlcnMsIFVDaGFyIGFkZGl0aW9uYWxBbGxvd2VkQ2hh
cmFjdGVyKQotewotICAgIEFTU0VSVCghYWRkaXRpb25hbEFsbG93ZWRDaGFyYWN0ZXIgfHwgYWRk
aXRpb25hbEFsbG93ZWRDaGFyYWN0ZXIgPT0gJyInIHx8IGFkZGl0aW9uYWxBbGxvd2VkQ2hhcmFj
dGVyID09ICdcJycgfHwgYWRkaXRpb25hbEFsbG93ZWRDaGFyYWN0ZXIgPT0gJz4nKTsKLSAgICBB
U1NFUlQoIW5vdEVub3VnaENoYXJhY3RlcnMpOwotICAgIEFTU0VSVChkZWNvZGVkQ2hhcmFjdGVy
LmlzRW1wdHkoKSk7Ci0gICAgCi0gICAgZW51bSBFbnRpdHlTdGF0ZSB7Ci0gICAgICAgIEluaXRp
YWwsCi0gICAgICAgIE51bWJlciwKLSAgICAgICAgTWF5YmVIZXhMb3dlckNhc2VYLAotICAgICAg
ICBNYXliZUhleFVwcGVyQ2FzZVgsCi0gICAgICAgIEhleCwKLSAgICAgICAgRGVjaW1hbCwKLSAg
ICAgICAgTmFtZWQKLSAgICB9OwotICAgIEVudGl0eVN0YXRlIGVudGl0eVN0YXRlID0gSW5pdGlh
bDsKLSAgICBVQ2hhcjMyIHJlc3VsdCA9IDA7Ci0gICAgU3RyaW5nQnVpbGRlciBjb25zdW1lZENo
YXJhY3RlcnM7Ci0gICAgCi0gICAgd2hpbGUgKCFzb3VyY2UuaXNFbXB0eSgpKSB7Ci0gICAgICAg
IFVDaGFyIGNjID0gc291cmNlLmN1cnJlbnRDaGFyKCk7Ci0gICAgICAgIHN3aXRjaCAoZW50aXR5
U3RhdGUpIHsKLSAgICAgICAgY2FzZSBJbml0aWFsOiB7Ci0gICAgICAgICAgICBpZiAoY2MgPT0g
J1x4MDknIHx8IGNjID09ICdceDBBJyB8fCBjYyA9PSAnXHgwQycgfHwgY2MgPT0gJyAnIHx8IGNj
ID09ICc8JyB8fCBjYyA9PSAnJicpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgICAgaWYgKGFkZGl0aW9uYWxBbGxvd2VkQ2hhcmFjdGVyICYmIGNjID09IGFkZGl0aW9u
YWxBbGxvd2VkQ2hhcmFjdGVyKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgICAgIGlmIChjYyA9PSAnIycpIHsKLSAgICAgICAgICAgICAgICBlbnRpdHlTdGF0ZSA9IE51
bWJlcjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGlmICgoY2MgPj0gJ2EnICYmIGNjIDw9ICd6JykgfHwgKGNjID49ICdBJyAmJiBjYyA8PSAnWicp
KSB7Ci0gICAgICAgICAgICAgICAgZW50aXR5U3RhdGUgPSBOYW1lZDsKLSAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgfQotICAgICAgICBjYXNlIE51bWJlcjogewotICAgICAgICAgICAgaWYgKGNjID09ICd4
JykgewotICAgICAgICAgICAgICAgIGVudGl0eVN0YXRlID0gTWF5YmVIZXhMb3dlckNhc2VYOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGNj
ID09ICdYJykgewotICAgICAgICAgICAgICAgIGVudGl0eVN0YXRlID0gTWF5YmVIZXhVcHBlckNh
c2VYOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
aWYgKGNjID49ICcwJyAmJiBjYyA8PSAnOScpIHsKLSAgICAgICAgICAgICAgICBlbnRpdHlTdGF0
ZSA9IERlY2ltYWw7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBzb3VyY2UucHVzaCgnIycpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICB9Ci0gICAgICAgIGNhc2UgTWF5YmVIZXhMb3dlckNhc2VYOiB7Ci0gICAgICAgICAg
ICBpZiAoaXNIZXhEaWdpdChjYykpIHsKLSAgICAgICAgICAgICAgICBlbnRpdHlTdGF0ZSA9IEhl
eDsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IHNvdXJjZS5wdXNoKCcjJyk7Ci0gICAgICAgICAgICBzb3VyY2UucHVzaCgneCcpOwotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgTWF5YmVIZXhVcHBl
ckNhc2VYOiB7Ci0gICAgICAgICAgICBpZiAoaXNIZXhEaWdpdChjYykpIHsKLSAgICAgICAgICAg
ICAgICBlbnRpdHlTdGF0ZSA9IEhleDsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIHNvdXJjZS5wdXNoKCcjJyk7Ci0gICAgICAgICAgICBzb3Vy
Y2UucHVzaCgnWCcpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAg
ICAgIGNhc2UgSGV4OiB7Ci0gICAgICAgICAgICBpZiAoY2MgPj0gJzAnICYmIGNjIDw9ICc5JykK
LSAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQgKiAxNiArIGNjIC0gJzAnOwotICAgICAg
ICAgICAgZWxzZSBpZiAoY2MgPj0gJ2EnICYmIGNjIDw9ICdmJykKLSAgICAgICAgICAgICAgICBy
ZXN1bHQgPSByZXN1bHQgKiAxNiArIDEwICsgY2MgLSAnYSc7Ci0gICAgICAgICAgICBlbHNlIGlm
IChjYyA+PSAnQScgJiYgY2MgPD0gJ0YnKQotICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3Vs
dCAqIDE2ICsgMTAgKyBjYyAtICdBJzsKLSAgICAgICAgICAgIGVsc2UgaWYgKGNjID09ICc7Jykg
ewotICAgICAgICAgICAgICAgIHNvdXJjZS5hZHZhbmNlQW5kQVNTRVJUKGNjKTsKLSAgICAgICAg
ICAgICAgICBQYXJzZXJGdW5jdGlvbnM6OmNvbnZlcnRUb1VURjE2KFBhcnNlckZ1bmN0aW9uczo6
bGVnYWxFbnRpdHlGb3IocmVzdWx0KSwgZGVjb2RlZENoYXJhY3Rlcik7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKFBhcnNlckZ1bmN0aW9uczo6
YWNjZXB0TWFsZm9ybWVkKCkpIHsKLSAgICAgICAgICAgICAgICBQYXJzZXJGdW5jdGlvbnM6OmNv
bnZlcnRUb1VURjE2KFBhcnNlckZ1bmN0aW9uczo6bGVnYWxFbnRpdHlGb3IocmVzdWx0KSwgZGVj
b2RlZENoYXJhY3Rlcik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHVuY29uc3VtZUNoYXJhY3RlcnMoc291cmNlLCBj
b25zdW1lZENoYXJhY3RlcnMpOwotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRGVj
aW1hbDogewotICAgICAgICAgICAgaWYgKGNjID49ICcwJyAmJiBjYyA8PSAnOScpCi0gICAgICAg
ICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICogMTAgKyBjYyAtICcwJzsKLSAgICAgICAgICAgIGVs
c2UgaWYgKGNjID09ICc7JykgewotICAgICAgICAgICAgICAgIHNvdXJjZS5hZHZhbmNlQW5kQVNT
RVJUKGNjKTsKLSAgICAgICAgICAgICAgICBQYXJzZXJGdW5jdGlvbnM6OmNvbnZlcnRUb1VURjE2
KFBhcnNlckZ1bmN0aW9uczo6bGVnYWxFbnRpdHlGb3IocmVzdWx0KSwgZGVjb2RlZENoYXJhY3Rl
cik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9IGVsc2UgaWYg
KFBhcnNlckZ1bmN0aW9uczo6YWNjZXB0TWFsZm9ybWVkKCkpIHsKLSAgICAgICAgICAgICAgICBQ
YXJzZXJGdW5jdGlvbnM6OmNvbnZlcnRUb1VURjE2KFBhcnNlckZ1bmN0aW9uczo6bGVnYWxFbnRp
dHlGb3IocmVzdWx0KSwgZGVjb2RlZENoYXJhY3Rlcik7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHVuY29uc3VtZUNo
YXJhY3RlcnMoc291cmNlLCBjb25zdW1lZENoYXJhY3RlcnMpOwotICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIGNhc2UgTmFtZWQ6IHsKLSAgICAgICAgICAgIHJldHVybiBQYXJzZXJGdW5jdGlv
bnM6OmNvbnN1bWVOYW1lZEVudGl0eShzb3VyY2UsIGRlY29kZWRDaGFyYWN0ZXIsIG5vdEVub3Vn
aENoYXJhY3RlcnMsIGFkZGl0aW9uYWxBbGxvd2VkQ2hhcmFjdGVyLCBjYyk7Ci0gICAgICAgIH0K
LSAgICAgICAgfQotICAgICAgICBjb25zdW1lZENoYXJhY3RlcnMuYXBwZW5kKGNjKTsKLSAgICAg
ICAgc291cmNlLmFkdmFuY2VBbmRBU1NFUlQoY2MpOwotICAgIH0KLSAgICBBU1NFUlQoc291cmNl
LmlzRW1wdHkoKSk7Ci0gICAgbm90RW5vdWdoQ2hhcmFjdGVycyA9IHRydWU7Ci0gICAgdW5jb25z
dW1lQ2hhcmFjdGVycyhzb3VyY2UsIGNvbnN1bWVkQ2hhcmFjdGVycyk7Ci0gICAgcmV0dXJuIGZh
bHNlOwotfQotCi19Ci0KLSNlbmRpZiAvLyBDaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXJJbmxpbmVN
ZXRob2RzX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvQ2hhcmFjdGVyUmVmZXJl
bmNlUGFyc2VySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3htbC9wYXJz
ZXIvQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VySW5saW5lcy5oCShyZXZpc2lvbiAxMzMzODkpCShm
cm9tIFNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VySW5s
aW5lTWV0aG9kcy5oOjEzMzM4OSkKKysrIFNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvQ2hhcmFj
dGVyUmVmZXJlbmNlUGFyc2VySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTcz
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUsIEluYy4gQWxsIFJpZ2h0cyBSZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VySW5saW5lTWV0aG9kc19oCisjZGVmaW5lIENoYXJh
Y3RlclJlZmVyZW5jZVBhcnNlcklubGluZU1ldGhvZHNfaAorCisjaW5jbHVkZSA8d3RmL3RleHQv
U3RyaW5nQnVpbGRlci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2lubGluZSBib29sIGlz
SGV4RGlnaXQoVUNoYXIgY2MpCit7CisgICAgcmV0dXJuIChjYyA+PSAnMCcgJiYgY2MgPD0gJzkn
KSB8fCAoY2MgPj0gJ2EnICYmIGNjIDw9ICdmJykgfHwgKGNjID49ICdBJyAmJiBjYyA8PSAnRicp
OworfQorCitpbmxpbmUgdm9pZCB1bmNvbnN1bWVDaGFyYWN0ZXJzKFNlZ21lbnRlZFN0cmluZyYg
c291cmNlLCBjb25zdCBTdHJpbmdCdWlsZGVyJiBjb25zdW1lZENoYXJhY3RlcnMpCit7CisgICAg
aWYgKGNvbnN1bWVkQ2hhcmFjdGVycy5sZW5ndGgoKSA9PSAxKQorICAgICAgICBzb3VyY2UucHVz
aChjb25zdW1lZENoYXJhY3RlcnNbMF0pOworICAgIGVsc2UgaWYgKGNvbnN1bWVkQ2hhcmFjdGVy
cy5sZW5ndGgoKSA9PSAyKSB7CisgICAgICAgIHNvdXJjZS5wdXNoKGNvbnN1bWVkQ2hhcmFjdGVy
c1swXSk7CisgICAgICAgIHNvdXJjZS5wdXNoKGNvbnN1bWVkQ2hhcmFjdGVyc1sxXSk7CisgICAg
fSBlbHNlCisgICAgICAgIHNvdXJjZS5wcmVwZW5kKFNlZ21lbnRlZFN0cmluZyhTdHJpbmcoY29u
c3VtZWRDaGFyYWN0ZXJzLmNoYXJhY3RlcnMoKSwgY29uc3VtZWRDaGFyYWN0ZXJzLmxlbmd0aCgp
KSkpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgUGFyc2VyRnVuY3Rpb25zPgorYm9vbCBjb25z
dW1lQ2hhcmFjdGVyUmVmZXJlbmNlKFNlZ21lbnRlZFN0cmluZyYgc291cmNlLCBTdHJpbmdCdWls
ZGVyJiBkZWNvZGVkQ2hhcmFjdGVyLCBib29sJiBub3RFbm91Z2hDaGFyYWN0ZXJzLCBVQ2hhciBh
ZGRpdGlvbmFsQWxsb3dlZENoYXJhY3RlcikKK3sKKyAgICBBU1NFUlQoIWFkZGl0aW9uYWxBbGxv
d2VkQ2hhcmFjdGVyIHx8IGFkZGl0aW9uYWxBbGxvd2VkQ2hhcmFjdGVyID09ICciJyB8fCBhZGRp
dGlvbmFsQWxsb3dlZENoYXJhY3RlciA9PSAnXCcnIHx8IGFkZGl0aW9uYWxBbGxvd2VkQ2hhcmFj
dGVyID09ICc+Jyk7CisgICAgQVNTRVJUKCFub3RFbm91Z2hDaGFyYWN0ZXJzKTsKKyAgICBBU1NF
UlQoZGVjb2RlZENoYXJhY3Rlci5pc0VtcHR5KCkpOworICAgIAorICAgIGVudW0gRW50aXR5U3Rh
dGUgeworICAgICAgICBJbml0aWFsLAorICAgICAgICBOdW1iZXIsCisgICAgICAgIE1heWJlSGV4
TG93ZXJDYXNlWCwKKyAgICAgICAgTWF5YmVIZXhVcHBlckNhc2VYLAorICAgICAgICBIZXgsCisg
ICAgICAgIERlY2ltYWwsCisgICAgICAgIE5hbWVkCisgICAgfTsKKyAgICBFbnRpdHlTdGF0ZSBl
bnRpdHlTdGF0ZSA9IEluaXRpYWw7CisgICAgVUNoYXIzMiByZXN1bHQgPSAwOworICAgIFN0cmlu
Z0J1aWxkZXIgY29uc3VtZWRDaGFyYWN0ZXJzOworICAgIAorICAgIHdoaWxlICghc291cmNlLmlz
RW1wdHkoKSkgeworICAgICAgICBVQ2hhciBjYyA9IHNvdXJjZS5jdXJyZW50Q2hhcigpOworICAg
ICAgICBzd2l0Y2ggKGVudGl0eVN0YXRlKSB7CisgICAgICAgIGNhc2UgSW5pdGlhbDogeworICAg
ICAgICAgICAgaWYgKGNjID09ICdceDA5JyB8fCBjYyA9PSAnXHgwQScgfHwgY2MgPT0gJ1x4MEMn
IHx8IGNjID09ICcgJyB8fCBjYyA9PSAnPCcgfHwgY2MgPT0gJyYnKQorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmIChhZGRpdGlvbmFsQWxsb3dlZENoYXJhY3Rl
ciAmJiBjYyA9PSBhZGRpdGlvbmFsQWxsb3dlZENoYXJhY3RlcikKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAoY2MgPT0gJyMnKSB7CisgICAgICAgICAgICAg
ICAgZW50aXR5U3RhdGUgPSBOdW1iZXI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBpZiAoKGNjID49ICdhJyAmJiBjYyA8PSAneicpIHx8IChjYyA+
PSAnQScgJiYgY2MgPD0gJ1onKSkgeworICAgICAgICAgICAgICAgIGVudGl0eVN0YXRlID0gTmFt
ZWQ7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBOdW1iZXI6IHsKKyAgICAg
ICAgICAgIGlmIChjYyA9PSAneCcpIHsKKyAgICAgICAgICAgICAgICBlbnRpdHlTdGF0ZSA9IE1h
eWJlSGV4TG93ZXJDYXNlWDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmIChjYyA9PSAnWCcpIHsKKyAgICAgICAgICAgICAgICBlbnRpdHlTdGF0
ZSA9IE1heWJlSGV4VXBwZXJDYXNlWDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmIChjYyA+PSAnMCcgJiYgY2MgPD0gJzknKSB7CisgICAgICAg
ICAgICAgICAgZW50aXR5U3RhdGUgPSBEZWNpbWFsOworICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgc291cmNlLnB1c2goJyMnKTsKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBjYXNlIE1heWJlSGV4TG93ZXJD
YXNlWDogeworICAgICAgICAgICAgaWYgKGlzSGV4RGlnaXQoY2MpKSB7CisgICAgICAgICAgICAg
ICAgZW50aXR5U3RhdGUgPSBIZXg7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBzb3VyY2UucHVzaCgnIycpOworICAgICAgICAgICAgc291cmNl
LnB1c2goJ3gnKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAg
ICBjYXNlIE1heWJlSGV4VXBwZXJDYXNlWDogeworICAgICAgICAgICAgaWYgKGlzSGV4RGlnaXQo
Y2MpKSB7CisgICAgICAgICAgICAgICAgZW50aXR5U3RhdGUgPSBIZXg7CisgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzb3VyY2UucHVzaCgnIycp
OworICAgICAgICAgICAgc291cmNlLnB1c2goJ1gnKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEhleDogeworICAgICAgICAgICAgaWYgKGNjID49
ICcwJyAmJiBjYyA8PSAnOScpCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICogMTYg
KyBjYyAtICcwJzsKKyAgICAgICAgICAgIGVsc2UgaWYgKGNjID49ICdhJyAmJiBjYyA8PSAnZicp
CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICogMTYgKyAxMCArIGNjIC0gJ2EnOwor
ICAgICAgICAgICAgZWxzZSBpZiAoY2MgPj0gJ0EnICYmIGNjIDw9ICdGJykKKyAgICAgICAgICAg
ICAgICByZXN1bHQgPSByZXN1bHQgKiAxNiArIDEwICsgY2MgLSAnQSc7CisgICAgICAgICAgICBl
bHNlIGlmIChjYyA9PSAnOycpIHsKKyAgICAgICAgICAgICAgICBzb3VyY2UuYWR2YW5jZUFuZEFT
U0VSVChjYyk7CisgICAgICAgICAgICAgICAgUGFyc2VyRnVuY3Rpb25zOjpjb252ZXJ0VG9VVEYx
NihQYXJzZXJGdW5jdGlvbnM6OmxlZ2FsRW50aXR5Rm9yKHJlc3VsdCksIGRlY29kZWRDaGFyYWN0
ZXIpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfSBlbHNlIGlm
IChQYXJzZXJGdW5jdGlvbnM6OmFjY2VwdE1hbGZvcm1lZCgpKSB7CisgICAgICAgICAgICAgICAg
UGFyc2VyRnVuY3Rpb25zOjpjb252ZXJ0VG9VVEYxNihQYXJzZXJGdW5jdGlvbnM6OmxlZ2FsRW50
aXR5Rm9yKHJlc3VsdCksIGRlY29kZWRDaGFyYWN0ZXIpOworICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB1bmNvbnN1bWVD
aGFyYWN0ZXJzKHNvdXJjZSwgY29uc3VtZWRDaGFyYWN0ZXJzKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBjYXNlIERlY2ltYWw6IHsKKyAgICAgICAgICAgIGlmIChjYyA+PSAnMCcgJiYg
Y2MgPD0gJzknKQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAqIDEwICsgY2MgLSAn
MCc7CisgICAgICAgICAgICBlbHNlIGlmIChjYyA9PSAnOycpIHsKKyAgICAgICAgICAgICAgICBz
b3VyY2UuYWR2YW5jZUFuZEFTU0VSVChjYyk7CisgICAgICAgICAgICAgICAgUGFyc2VyRnVuY3Rp
b25zOjpjb252ZXJ0VG9VVEYxNihQYXJzZXJGdW5jdGlvbnM6OmxlZ2FsRW50aXR5Rm9yKHJlc3Vs
dCksIGRlY29kZWRDaGFyYWN0ZXIpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICAgICAgfSBlbHNlIGlmIChQYXJzZXJGdW5jdGlvbnM6OmFjY2VwdE1hbGZvcm1lZCgpKSB7
CisgICAgICAgICAgICAgICAgUGFyc2VyRnVuY3Rpb25zOjpjb252ZXJ0VG9VVEYxNihQYXJzZXJG
dW5jdGlvbnM6OmxlZ2FsRW50aXR5Rm9yKHJlc3VsdCksIGRlY29kZWRDaGFyYWN0ZXIpOworICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICB1bmNvbnN1bWVDaGFyYWN0ZXJzKHNvdXJjZSwgY29uc3VtZWRDaGFyYWN0ZXJzKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIE5hbWVkOiB7CisgICAgICAgICAgICBy
ZXR1cm4gUGFyc2VyRnVuY3Rpb25zOjpjb25zdW1lTmFtZWRFbnRpdHkoc291cmNlLCBkZWNvZGVk
Q2hhcmFjdGVyLCBub3RFbm91Z2hDaGFyYWN0ZXJzLCBhZGRpdGlvbmFsQWxsb3dlZENoYXJhY3Rl
ciwgY2MpOworICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgY29uc3VtZWRDaGFyYWN0ZXJz
LmFwcGVuZChjYyk7CisgICAgICAgIHNvdXJjZS5hZHZhbmNlQW5kQVNTRVJUKGNjKTsKKyAgICB9
CisgICAgQVNTRVJUKHNvdXJjZS5pc0VtcHR5KCkpOworICAgIG5vdEVub3VnaENoYXJhY3RlcnMg
PSB0cnVlOworICAgIHVuY29uc3VtZUNoYXJhY3RlcnMoc291cmNlLCBjb25zdW1lZENoYXJhY3Rl
cnMpOworICAgIHJldHVybiBmYWxzZTsKK30KKworfQorCisjZW5kaWYgLy8gQ2hhcmFjdGVyUmVm
ZXJlbmNlUGFyc2VySW5saW5lTWV0aG9kc19oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS94bWwvcGFy
c2VyL0NoYXJhY3RlclJlZmVyZW5jZVBhcnNlcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS94bWwvcGFyc2VyL0NoYXJhY3RlclJlZmVyZW5jZVBhcnNlcklubGluZXMuaAko
cmV2aXNpb24gMTMzMzg5KQorKysgU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9DaGFyYWN0ZXJS
ZWZlcmVuY2VQYXJzZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0LDggKzI0LDggQEAK
ICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYgQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2Vy
SW5saW5lTWV0aG9kc19oCi0jZGVmaW5lIENoYXJhY3RlclJlZmVyZW5jZVBhcnNlcklubGluZU1l
dGhvZHNfaAorI2lmbmRlZiBDaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXJJbmxpbmVzX2gKKyNkZWZp
bmUgQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VySW5saW5lc19oCiAKICNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdCdWlsZGVyLmg+CiAKQEAgLTE3MCw0ICsxNzAsNCBAQCBib29sIGNvbnN1bWVDaGFy
YWN0ZXJSZWZlcmVuY2UoU2VnbWVudGVkCiAKIH0KIAotI2VuZGlmIC8vIENoYXJhY3RlclJlZmVy
ZW5jZVBhcnNlcklubGluZU1ldGhvZHNfaAorI2VuZGlmIC8vIENoYXJhY3RlclJlZmVyZW5jZVBh
cnNlcklubGluZXNfaApJbmRleDogU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9NYXJrdXBUb2tl
bml6ZXJJbmxpbmVNZXRob2RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUveG1sL3Bh
cnNlci9NYXJrdXBUb2tlbml6ZXJJbmxpbmVNZXRob2RzLmgJKHJldmlzaW9uIDEzMzk3MykKKysr
IFNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvTWFya3VwVG9rZW5pemVySW5saW5lTWV0aG9kcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDk1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5
IFRvcmNoIE1vYmlsZSwgSW5jLiBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KLSAqIENvcHly
aWdodCAoQykgMjAxMCBHb29nbGUsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBNYXJrdXBUb2tlbml6
ZXJJbmxpbmVNZXRob2RzX2gKLSNkZWZpbmUgTWFya3VwVG9rZW5pemVySW5saW5lTWV0aG9kc19o
Ci0KLSNpbmNsdWRlICJTZWdtZW50ZWRTdHJpbmcuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1pbmxpbmUgYm9vbCBpc1Rva2VuaXplcldoaXRlc3BhY2UoVUNoYXIgY2MpCi17Ci0gICAgcmV0
dXJuIGNjID09ICcgJyB8fCBjYyA9PSAnXHgwQScgfHwgY2MgPT0gJ1x4MDknIHx8IGNjID09ICdc
eDBDJzsKLX0KLQotaW5saW5lIHZvaWQgYWR2YW5jZVN0cmluZ0FuZEFTU0VSVElnbm9yaW5nQ2Fz
ZShTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSwgY29uc3QgY2hhciogZXhwZWN0ZWRDaGFyYWN0ZXJz
KQotewotICAgIHdoaWxlICgqZXhwZWN0ZWRDaGFyYWN0ZXJzKQotICAgICAgICBzb3VyY2UuYWR2
YW5jZUFuZEFTU0VSVElnbm9yaW5nQ2FzZSgqZXhwZWN0ZWRDaGFyYWN0ZXJzKyspOwotfQotCi1p
bmxpbmUgdm9pZCBhZHZhbmNlU3RyaW5nQW5kQVNTRVJUKFNlZ21lbnRlZFN0cmluZyYgc291cmNl
LCBjb25zdCBjaGFyKiBleHBlY3RlZENoYXJhY3RlcnMpCi17Ci0gICAgd2hpbGUgKCpleHBlY3Rl
ZENoYXJhY3RlcnMpCi0gICAgICAgIHNvdXJjZS5hZHZhbmNlQW5kQVNTRVJUKCpleHBlY3RlZENo
YXJhY3RlcnMrKyk7Ci19Ci0KLSNpZiBDT01QSUxFUihNU1ZDKQotLy8gV2UgbmVlZCB0byBkaXNh
YmxlIHRoZSAidW5yZWFjaGFibGUgY29kZSIgd2FybmluZyBiZWNhdXNlIHdlIHdhbnQgdG8gYXNz
ZXJ0Ci0vLyB0aGF0IHNvbWUgY29kZSBwb2ludHMgYXJlbid0IHJlYWNoZWQgaW4gdGhlIHN0YXRl
IG1hY2hpbmUuCi0jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDcwMikKLSNlbmRpZgotCi0jZGVm
aW5lIEJFR0lOX1NUQVRFKHByZWZpeCwgc3RhdGVOYW1lKSBjYXNlIHByZWZpeDo6c3RhdGVOYW1l
OiBzdGF0ZU5hbWU6Ci0jZGVmaW5lIEVORF9TVEFURSgpIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyBi
cmVhazsKLQotLy8gV2UgdXNlIHRoaXMgbWFjcm8gd2hlbiB0aGUgSFRNTDUgc3BlYyBzYXlzICJy
ZWNvbnN1bWUgdGhlIGN1cnJlbnQgaW5wdXQKLS8vIGNoYXJhY3RlciBpbiB0aGUgPG11bWJsZT4g
c3RhdGUuIgotI2RlZmluZSBSRUNPTlNVTUVfSU4ocHJlZml4LCBzdGF0ZU5hbWUpICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGRvIHsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAg
ICBtX3N0YXRlID0gcHJlZml4OjpzdGF0ZU5hbWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgICAgICBnb3RvIHN0YXRlTmFtZTsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gd2hpbGUgKGZhbHNlKQot
Ci0vLyBXZSB1c2UgdGhpcyBtYWNybyB3aGVuIHRoZSBIVE1MNSBzcGVjIHNheXMgImNvbnN1bWUg
dGhlIG5leHQgaW5wdXQKLS8vIGNoYXJhY3RlciAuLi4gYW5kIHN3aXRjaCB0byB0aGUgPG11bWJs
ZT4gc3RhdGUuIgotI2RlZmluZSBBRFZBTkNFX1RPKHByZWZpeCwgc3RhdGVOYW1lKSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGRvIHsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
ICAgICBtX3N0YXRlID0gcHJlZml4OjpzdGF0ZU5hbWU7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgICAgICBpZiAoIW1faW5wdXRTdHJlYW1QcmVwcm9jZXNzb3Iu
YWR2YW5jZShzb3VyY2UpKSAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgcmV0dXJu
IGhhdmVCdWZmZXJlZENoYXJhY3RlclRva2VuKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgICAgICBjYyA9IG1faW5wdXRTdHJlYW1QcmVwcm9jZXNzb3IubmV4dElucHV0Q2hhcmFj
dGVyKCk7ICAgICAgICAgICAgICAgXAotICAgICAgICBnb3RvIHN0YXRlTmFtZTsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gd2hpbGUg
KGZhbHNlKQotCi0vLyBTb21ldGltZXMgdGhlcmUncyBtb3JlIGNvbXBsaWNhdGVkIGxvZ2ljIGlu
IHRoZSBzcGVjIHRoYXQgc2VwYXJhdGVzIHdoZW4KLS8vIHdlIGNvbnN1bWUgdGhlIG5leHQgaW5w
dXQgY2hhcmFjdGVyIGFuZCB3aGVuIHdlIHN3aXRjaCB0byBhIHBhcnRpY3VsYXIKLS8vIHN0YXRl
LiBXZSBoYW5kbGUgdGhvc2UgY2FzZXMgYnkgYWR2YW5jaW5nIHRoZSBzb3VyY2UgZGlyZWN0bHkg
YW5kIHVzaW5nCi0vLyB0aGlzIG1hY3JvIHRvIHN3aXRjaCB0byB0aGUgaW5kaWNhdGVkIHN0YXRl
LgotI2RlZmluZSBTV0lUQ0hfVE8ocHJlZml4LCBzdGF0ZU5hbWUpICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBtX3N0
YXRlID0gcHJlZml4OjpzdGF0ZU5hbWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgICAgICBpZiAoc291cmNlLmlzRW1wdHkoKSB8fCAhbV9pbnB1dFN0cmVhbVBy
ZXByb2Nlc3Nvci5wZWVrKHNvdXJjZSkpICAgXAotICAgICAgICAgICAgcmV0dXJuIGhhdmVCdWZm
ZXJlZENoYXJhY3RlclRva2VuKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAg
ICBjYyA9IG1faW5wdXRTdHJlYW1QcmVwcm9jZXNzb3IubmV4dElucHV0Q2hhcmFjdGVyKCk7ICAg
ICAgICAgICAgICAgXAotICAgICAgICBnb3RvIHN0YXRlTmFtZTsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gd2hpbGUgKGZhbHNlKQot
Ci19Ci0KLSNlbmRpZiAvLyBNYXJrdXBUb2tlbml6ZXJJbmxpbmVNZXRob2RzX2gKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvTWFya3VwVG9rZW5pemVySW5saW5lcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvTWFya3VwVG9rZW5pemVySW5saW5lcy5o
CShyZXZpc2lvbiAxMzMzODkpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvTWFya3Vw
VG9rZW5pemVySW5saW5lTWV0aG9kcy5oOjEzMzM4OSkKKysrIFNvdXJjZS9XZWJDb3JlL3htbC9w
YXJzZXIvTWFya3VwVG9rZW5pemVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
OTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1vYmlsZSwgSW5jLiBodHRwOi8v
d3d3LnRvcmNobW9iaWxlLmNvbS8KKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUsIEluYy4g
QWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBNYXJrdXBUb2tlbml6ZXJJbmxpbmVNZXRob2RzX2gKKyNkZWZpbmUg
TWFya3VwVG9rZW5pemVySW5saW5lTWV0aG9kc19oCisKKyNpbmNsdWRlICJTZWdtZW50ZWRTdHJp
bmcuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitpbmxpbmUgYm9vbCBpc1Rva2VuaXplcldo
aXRlc3BhY2UoVUNoYXIgY2MpCit7CisgICAgcmV0dXJuIGNjID09ICcgJyB8fCBjYyA9PSAnXHgw
QScgfHwgY2MgPT0gJ1x4MDknIHx8IGNjID09ICdceDBDJzsKK30KKworaW5saW5lIHZvaWQgYWR2
YW5jZVN0cmluZ0FuZEFTU0VSVElnbm9yaW5nQ2FzZShTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSwg
Y29uc3QgY2hhciogZXhwZWN0ZWRDaGFyYWN0ZXJzKQoreworICAgIHdoaWxlICgqZXhwZWN0ZWRD
aGFyYWN0ZXJzKQorICAgICAgICBzb3VyY2UuYWR2YW5jZUFuZEFTU0VSVElnbm9yaW5nQ2FzZSgq
ZXhwZWN0ZWRDaGFyYWN0ZXJzKyspOworfQorCitpbmxpbmUgdm9pZCBhZHZhbmNlU3RyaW5nQW5k
QVNTRVJUKFNlZ21lbnRlZFN0cmluZyYgc291cmNlLCBjb25zdCBjaGFyKiBleHBlY3RlZENoYXJh
Y3RlcnMpCit7CisgICAgd2hpbGUgKCpleHBlY3RlZENoYXJhY3RlcnMpCisgICAgICAgIHNvdXJj
ZS5hZHZhbmNlQW5kQVNTRVJUKCpleHBlY3RlZENoYXJhY3RlcnMrKyk7Cit9CisKKyNpZiBDT01Q
SUxFUihNU1ZDKQorLy8gV2UgbmVlZCB0byBkaXNhYmxlIHRoZSAidW5yZWFjaGFibGUgY29kZSIg
d2FybmluZyBiZWNhdXNlIHdlIHdhbnQgdG8gYXNzZXJ0CisvLyB0aGF0IHNvbWUgY29kZSBwb2lu
dHMgYXJlbid0IHJlYWNoZWQgaW4gdGhlIHN0YXRlIG1hY2hpbmUuCisjcHJhZ21hIHdhcm5pbmco
ZGlzYWJsZTogNDcwMikKKyNlbmRpZgorCisjZGVmaW5lIEJFR0lOX1NUQVRFKHByZWZpeCwgc3Rh
dGVOYW1lKSBjYXNlIHByZWZpeDo6c3RhdGVOYW1lOiBzdGF0ZU5hbWU6CisjZGVmaW5lIEVORF9T
VEFURSgpIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyBicmVhazsKKworLy8gV2UgdXNlIHRoaXMgbWFj
cm8gd2hlbiB0aGUgSFRNTDUgc3BlYyBzYXlzICJyZWNvbnN1bWUgdGhlIGN1cnJlbnQgaW5wdXQK
Ky8vIGNoYXJhY3RlciBpbiB0aGUgPG11bWJsZT4gc3RhdGUuIgorI2RlZmluZSBSRUNPTlNVTUVf
SU4ocHJlZml4LCBzdGF0ZU5hbWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBtX3N0YXRlID0gcHJlZml4OjpzdGF0ZU5h
bWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBnb3Rv
IHN0YXRlTmFtZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgIH0gd2hpbGUgKGZhbHNlKQorCisvLyBXZSB1c2UgdGhpcyBtYWNybyB3aGVu
IHRoZSBIVE1MNSBzcGVjIHNheXMgImNvbnN1bWUgdGhlIG5leHQgaW5wdXQKKy8vIGNoYXJhY3Rl
ciAuLi4gYW5kIHN3aXRjaCB0byB0aGUgPG11bWJsZT4gc3RhdGUuIgorI2RlZmluZSBBRFZBTkNF
X1RPKHByZWZpeCwgc3RhdGVOYW1lKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBtX3N0YXRlID0gcHJlZml4OjpzdGF0
ZU5hbWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBp
ZiAoIW1faW5wdXRTdHJlYW1QcmVwcm9jZXNzb3IuYWR2YW5jZShzb3VyY2UpKSAgICAgICAgICAg
ICAgICAgICAgXAorICAgICAgICAgICAgcmV0dXJuIGhhdmVCdWZmZXJlZENoYXJhY3RlclRva2Vu
KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBjYyA9IG1faW5wdXRTdHJl
YW1QcmVwcm9jZXNzb3IubmV4dElucHV0Q2hhcmFjdGVyKCk7ICAgICAgICAgICAgICAgXAorICAg
ICAgICBnb3RvIHN0YXRlTmFtZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKGZhbHNlKQorCisvLyBTb21ldGltZXMgdGhl
cmUncyBtb3JlIGNvbXBsaWNhdGVkIGxvZ2ljIGluIHRoZSBzcGVjIHRoYXQgc2VwYXJhdGVzIHdo
ZW4KKy8vIHdlIGNvbnN1bWUgdGhlIG5leHQgaW5wdXQgY2hhcmFjdGVyIGFuZCB3aGVuIHdlIHN3
aXRjaCB0byBhIHBhcnRpY3VsYXIKKy8vIHN0YXRlLiBXZSBoYW5kbGUgdGhvc2UgY2FzZXMgYnkg
YWR2YW5jaW5nIHRoZSBzb3VyY2UgZGlyZWN0bHkgYW5kIHVzaW5nCisvLyB0aGlzIG1hY3JvIHRv
IHN3aXRjaCB0byB0aGUgaW5kaWNhdGVkIHN0YXRlLgorI2RlZmluZSBTV0lUQ0hfVE8ocHJlZml4
LCBzdGF0ZU5hbWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
IGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgICAgICBtX3N0YXRlID0gcHJlZml4OjpzdGF0ZU5hbWU7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoc291cmNl
LmlzRW1wdHkoKSB8fCAhbV9pbnB1dFN0cmVhbVByZXByb2Nlc3Nvci5wZWVrKHNvdXJjZSkpICAg
XAorICAgICAgICAgICAgcmV0dXJuIGhhdmVCdWZmZXJlZENoYXJhY3RlclRva2VuKCk7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBjYyA9IG1faW5wdXRTdHJlYW1QcmVwcm9j
ZXNzb3IubmV4dElucHV0Q2hhcmFjdGVyKCk7ICAgICAgICAgICAgICAgXAorICAgICAgICBnb3Rv
IHN0YXRlTmFtZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgIH0gd2hpbGUgKGZhbHNlKQorCit9CisKKyNlbmRpZiAvLyBNYXJrdXBUb2tl
bml6ZXJJbmxpbmVNZXRob2RzX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvTWFy
a3VwVG9rZW5pemVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3htbC9w
YXJzZXIvTWFya3VwVG9rZW5pemVySW5saW5lcy5oCShyZXZpc2lvbiAxMzMzODkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS94bWwvcGFyc2VyL01hcmt1cFRva2VuaXplcklubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMjUsOCArMjUsOCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIE1h
cmt1cFRva2VuaXplcklubGluZU1ldGhvZHNfaAotI2RlZmluZSBNYXJrdXBUb2tlbml6ZXJJbmxp
bmVNZXRob2RzX2gKKyNpZm5kZWYgTWFya3VwVG9rZW5pemVySW5saW5lc19oCisjZGVmaW5lIE1h
cmt1cFRva2VuaXplcklubGluZXNfaAogCiAjaW5jbHVkZSAiU2VnbWVudGVkU3RyaW5nLmgiCiAK
QEAgLTkyLDQgKzkyLDQgQEAgaW5saW5lIHZvaWQgYWR2YW5jZVN0cmluZ0FuZEFTU0VSVChTZWdt
ZQogCiB9CiAKLSNlbmRpZiAvLyBNYXJrdXBUb2tlbml6ZXJJbmxpbmVNZXRob2RzX2gKKyNlbmRp
ZiAvLyBNYXJrdXBUb2tlbml6ZXJJbmxpbmVzX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3htbC9w
YXJzZXIvWE1MQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTENoYXJhY3RlclJlZmVyZW5jZVBhcnNlci5jcHAJKHJl
dmlzaW9uIDEzMzk3MykKKysrIFNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MQ2hhcmFjdGVy
UmVmZXJlbmNlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAogCiB1
c2luZyBuYW1lc3BhY2UgV1RGOwogCi0jaW5jbHVkZSAiQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2Vy
SW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkNoYXJhY3RlclJlZmVyZW5jZVBhcnNlcklubGlu
ZXMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS94bWwv
cGFyc2VyL1hNTFRva2VuaXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUveG1s
L3BhcnNlci9YTUxUb2tlbml6ZXIuY3BwCShyZXZpc2lvbiAxMzM5NzMpCisrKyBTb3VyY2UvV2Vi
Q29yZS94bWwvcGFyc2VyL1hNTFRva2VuaXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcg
KzI4LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJYTUxUb2tlbml6ZXIuaCIK
IAotI2luY2x1ZGUgIk1hcmt1cFRva2VuaXplcklubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJN
YXJrdXBUb2tlbml6ZXJJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNp
bmNsdWRlICJYTUxDaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXIuaCIKICNpbmNsdWRlICJYTUxUb2tl
bi5oIgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>173157</attachid>
            <date>2012-11-08 17:23:01 -0800</date>
            <delta_ts>2012-11-08 18:51:56 -0800</delta_ts>
            <desc>Removed file that has been obsoleted by other changes during the svn up&apos;s.</desc>
            <filename>bug-101145.patch</filename>
            <type>text/plain</type>
            <size>258275</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTMzOTczKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcyIEBA
CisyMDEyLTExLTA4ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBS
ZW5hbWVkIC4uLklubGluZU1ldGhvZHMuaCBmaWxlcyB0byAuLi5JbmxpbmVzLmguCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDExNDUuCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBpcyBvbmx5IGEg
cmVmYWN0b3JpbmcgZWZmb3J0IHRvIHJlbmFtZSB0aGUgZmlsZXMuIFRoZXJlIGFyZSBubworICAg
ICAgICBmdW5jdGlvbmFsaXR5IGNoYW5nZXMuCisKKyAgICAgICAgKiBBUEkvSlNPYmplY3RSZWYu
Y3BwOgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogSmF2YVNjcmlw
dENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvajoKKyAgICAg
ICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuY3Bw
OgorICAgICAgICAqIGhlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwOgorICAgICAgICAqIGhlYXAv
Q29waWVkQmxvY2suaDoKKyAgICAgICAgKiBoZWFwL0NvcGllZFNwYWNlLmNwcDoKKyAgICAgICAg
KiBoZWFwL0NvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oOiBSZW1vdmVkLgorICAgICAgICAqIGhl
YXAvQ29waWVkU3BhY2VJbmxpbmVzLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0NvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oLgorICAgICAgICAqIGhlYXAvQ29weVZp
c2l0b3IuY3BwOgorICAgICAgICAqIGhlYXAvQ29weVZpc2l0b3JJbmxpbmVNZXRob2RzLmg6IFJl
bW92ZWQuCisgICAgICAgICogaGVhcC9Db3B5VmlzaXRvcklubGluZXMuaDogQ29waWVkIGZyb20g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVZpc2l0b3JJbmxpbmVNZXRob2RzLmguCisg
ICAgICAgICogaGVhcC9HQ1RocmVhZC5jcHA6CisgICAgICAgICogaGVhcC9HQ1RocmVhZFNoYXJl
ZERhdGEuY3BwOgorICAgICAgICAqIGhlYXAvSGFuZGxlU3RhY2suY3BwOgorICAgICAgICAqIGhl
YXAvSGVhcC5jcHA6CisgICAgICAgICogaGVhcC9IZWFwUm9vdFZpc2l0b3IuaDoKKyAgICAgICAg
KiBoZWFwL01hcmtTdGFjay5jcHA6CisgICAgICAgICogaGVhcC9NYXJrU3RhY2tJbmxpbmVNZXRo
b2RzLmg6IFJlbW92ZWQuCisgICAgICAgICogaGVhcC9NYXJrU3RhY2tJbmxpbmVzLmg6IENvcGll
ZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFja0lubGluZU1ldGhvZHMu
aC4KKyAgICAgICAgKiBoZWFwL1Nsb3RWaXNpdG9yLmNwcDoKKyAgICAgICAgKiBoZWFwL1Nsb3RW
aXNpdG9yLmg6CisgICAgICAgICogaGVhcC9TbG90VmlzaXRvcklubGluZU1ldGhvZHMuaDogUmVt
b3ZlZC4KKyAgICAgICAgKiBoZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oOiBDb3BpZWQgZnJvbSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklubGluZU1ldGhvZHMuaC4KKyAg
ICAgICAgKiBqaXQvSG9zdENhbGxSZXR1cm5WYWx1ZS5jcHA6CisgICAgICAgICogaml0L0pJVC5j
cHA6CisgICAgICAgICogaml0L0pJVEFyaXRobWV0aWMuY3BwOgorICAgICAgICAqIGppdC9KSVRB
cml0aG1ldGljMzJfNjQuY3BwOgorICAgICAgICAqIGppdC9KSVRDYWxsLmNwcDoKKyAgICAgICAg
KiBqaXQvSklUQ2FsbDMyXzY0LmNwcDoKKyAgICAgICAgKiBqaXQvSklUSW5saW5lTWV0aG9kcy5o
OiBSZW1vdmVkLgorICAgICAgICAqIGppdC9KSVRJbmxpbmVzLmg6IENvcGllZCBmcm9tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lTWV0aG9kcy5oLgorICAgICAgICAqIGppdC9K
SVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKiBqaXQvSklUT3Bjb2RlczMyXzY0LmNwcDoKKyAgICAg
ICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0
eUFjY2VzczMyXzY0LmNwcDoKKyAgICAgICAgKiBqc2MuY3BwOgorICAgICAgICAqIHJ1bnRpbWUv
QXJyYXlDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgICogcnVudGltZS9BcnJheVByb3RvdHlwZS5j
cHA6CisgICAgICAgICogcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmg6IFJlbW92ZWQu
CisgICAgICAgICogcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVzLmg6IENvcGllZCBmcm9tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGluZU1ldGhvZHMuaC4KKyAgICAg
ICAgKiBydW50aW1lL0luZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oOiBSZW1vdmVkLgorICAg
ICAgICAqIHJ1bnRpbWUvSW5kZXhpbmdIZWFkZXJJbmxpbmVzLmg6IENvcGllZCBmcm9tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oLgor
ICAgICAgICAqIHJ1bnRpbWUvSlNBY3RpdmF0aW9uLmg6CisgICAgICAgICogcnVudGltZS9KU0Fy
cmF5LmNwcDoKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuaDoKKyAgICAgICAgKiBydW50aW1l
L0pTQ2VsbC5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuY3BwOgorICAgICAgICAqIHJ1
bnRpbWUvSlNWYWx1ZUlubGluZU1ldGhvZHMuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBydW50aW1l
L0pTVmFsdWVJbmxpbmVzLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTVmFsdWVJbmxpbmVNZXRob2RzLmguCisgICAgICAgICogcnVudGltZS9MaXRlcmFsUGFy
c2VyLmNwcDoKKyAgICAgICAgKiBydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmNwcDoKKyAgICAg
ICAgKiBydW50aW1lL09wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cE1hdGNo
ZXNBcnJheS5jcHA6CisgICAgICAgICogcnVudGltZS9SZWdFeHBPYmplY3QuY3BwOgorICAgICAg
ICAqIHJ1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcDoKKwogMjAxMi0xMS0wNyAgRmlsaXAgUGl6
bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIERGRyBjb25zdGFudCBmb2xkaW5nIGFu
ZCBDRkcgc2ltcGxpZmljYXRpb24gc2hvdWxkIGJlIHNtYXJ0IGVub3VnaCB0byBrbm93IHRoYXQg
aWYgYSBsb2dpY2FsIG9wJ3Mgb3BlcmFuZCBpcyBwcm92ZW4gdG8gaGF2ZSBhIG5vbi1tYXNxdWVy
YWRpbmcgc3RydWN0dXJlIHRoZW4gaXQgYWx3YXlzIGV2YWx1YXRlcyB0byB0cnVlCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24gMTMzOTcz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHdvcmtpbmcg
Y29weSkKQEAgLTI1Niw5ICsyNTYsOSBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRCbG9jay5oIFwKIAlTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZS5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0NvcGllZFNwYWNlLmggXAotCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNw
YWNlSW5saW5lTWV0aG9kcy5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRT
cGFjZUlubGluZXMuaCBcCiAgICAgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVZpc2l0
b3IuaCBcCi0gICAgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVZpc2l0b3JJbmxpbmVN
ZXRob2RzLmggXAorICAgIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlWaXNpdG9ySW5s
aW5lcy5oIFwKICAgICBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5VmlzaXRvci5jcHAg
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NhcmRTZXQuaCBcCiAJU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwIFwKQEAgLTI3Niw3ICsyNzYsNyBA
QCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9JbmNyZW1lbnRhbFN3ZWVwZXIuY3BwIFwKICAgICBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9TbG90VmlzaXRvci5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNp
dG9yLmggXAotCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lTWV0
aG9kcy5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklubGluZXMu
aCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlU3RhY2suY3BwIFwKIAlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5kbGVTdGFjay5oIFwKIAlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IYW5kbGVUeXBlcy5oIFwKQEAgLTI5OSw3ICsyOTksNyBAQCBqYXZhc2NyaXB0
Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3Rh
Y2tNYXJrZXIuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmNwcCBc
CiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmggXAotICAgIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFja0lubGluZU1ldGhvZHMuaCBcCisgICAgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrSW5saW5lcy5oIFwKIAlTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwUm9vdFZpc2l0b3IuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2VkQWxsb2NhdG9yLmggXApAQCAtNDAwLDcgKzQwMCw3IEBAIGphdmFzY3JpcHRjb3JlX3Nv
dXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmggXAogCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklURXhjZXB0aW9ucy5oIFwKLQlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VElubGluZU1ldGhvZHMuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVz
LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcCBcCiAJ
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcCBcCiAJU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcCBcCkBAIC00ODMsNyArNDgz
LDcgQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQm9vbGVhbk9iamVjdC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Cb29sZWFuUHJvdG90eXBlLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Qm9vbGVhblByb3RvdHlwZS5oIFwKLQlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0
ZXJmbHlJbmxpbmVNZXRob2RzLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1
dHRlcmZseUlubGluZXMuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVy
Zmx5LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFRyYW5zY2VuZGVu
dGFsRnVuY3Rpb24uaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FsbERhdGEu
Y3BwIFwKQEAgLTUzMSw3ICs1MzEsNyBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuaCBcCiAJU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0lkZW50aWZpZXIuaCBcCi0JU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0luZGV4aW5nSGVhZGVySW5saW5lcy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbmRleGluZ0hlYWRlci5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbmRleGluZ1R5cGUuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bmRleGluZ1R5cGUuaCBcCkBAIC01OTIsNyArNTkyLDcgQEAgamF2YXNjcmlwdGNvcmVfc291cmNl
cyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlSW5mby5oIFwKIAlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlLmNwcCBcCiAJU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5oIFwKLQlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1ZhbHVlSW5saW5lTWV0aG9kcy5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1ZhbHVlSW5saW5lcy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1ZhcmlhYmxlT2JqZWN0LmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNW
YXJpYWJsZU9iamVjdC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dpdGhT
Y29wZS5oIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAxMzM5NzMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsMTAgKzIy
LDEwIEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKIAotI2luY2x1ZGUgIkJ1dHRlcmZseUlubGlu
ZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJCdXR0ZXJmbHlJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQnl0
ZWNvZGVHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJDb21wbGV0aW9uLmgiCi0jaW5jbHVkZSAiQ29w
aWVkU3BhY2VJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiQ29waWVkU3BhY2VJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiRXhjZXB0aW9uSGVscGVycy5oIgogI2luY2x1ZGUgIkhlYXBTdGF0aXN0aWNz
LmgiCiAjaW5jbHVkZSAiSW5pdGlhbGl6ZVRocmVhZGluZy5oIgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9KU09iamVjdFJlZi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9KU09iamVjdFJlZi5jcHAJKHJldmlzaW9uIDEzMzk3MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNPYmplY3RSZWYuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSw5ICsyOSw5IEBACiAjaW5jbHVkZSAiSlNPYmplY3RSZWZQcml2YXRlLmgiCiAKICNpbmNsdWRl
ICJBUElDYXN0LmgiCi0jaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oIgorI2luY2x1
ZGUgIkJ1dHRlcmZseUlubGluZXMuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKLSNpbmNsdWRl
ICJDb3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGlu
ZXMuaCIKICNpbmNsdWRlICJEYXRlQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJFcnJvckNvbnN0
cnVjdG9yLmgiCiAjaW5jbHVkZSAiRnVuY3Rpb25Db25zdHJ1Y3Rvci5oIgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oJ
KHJldmlzaW9uIDEzMzk3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC01MzgsNyArNTM4LDcgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJ
CVJlbGF0aXZlUGF0aD0iLi5cLi5ccnVudGltZVxCdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgiCisJ
CQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxydW50aW1lXEJ1dHRlcmZseUlubGluZXMuaCIKIAkJCQk+
CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQpAQCAtNTQ2LDcgKzU0Niw3IEBACiAJCQkJPgogCQkJPC9G
aWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHJ1bnRpbWVcSW5kZXhpbmdI
ZWFkZXJJbmxpbmVNZXRob2RzLmgiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxydW50aW1lXElu
ZGV4aW5nSGVhZGVySW5saW5lcy5oIgogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCkBAIC0x
MDEwLDcgKzEwMTAsNyBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRp
dmVQYXRoPSIuLlwuLlxydW50aW1lXEpTVmFsdWVJbmxpbmVNZXRob2RzLmgiCisJCQkJUmVsYXRp
dmVQYXRoPSIuLlwuLlxydW50aW1lXEpTVmFsdWVJbmxpbmVzLmgiCiAJCQkJPgogCQkJPC9GaWxl
PgogCQkJPEZpbGUKQEAgLTE5ODYsNyArMTk4Niw3IEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJ
PEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGppdFxKSVRJbmxpbmVNZXRob2RzLmgiCisJ
CQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxqaXRcSklUSW5saW5lcy5oIgogCQkJCT4KIAkJCTwvRmls
ZT4KIAkJCTxGaWxlCkBAIC0yMzYyLDcgKzIzNjIsNyBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJ
CTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxoZWFwXENvcGllZFNwYWNlSW5saW5lTWV0
aG9kcy5oIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5caGVhcFxDb3BpZWRTcGFjZUlubGluZXMu
aCIKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQpAQCAtMjM3NCw3ICsyMzc0LDcgQEAKIAkJ
CQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5caGVhcFxD
b3B5VmlzaXRvcklubGluZU1ldGhvZHMuaCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGhlYXBc
Q29weVZpc2l0b3JJbmxpbmVzLmgiCiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKQEAgLTI1
NjIsNyArMjU2Miw3IEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXC4uXGhlYXBcTWFya1N0YWNrSW5saW5lTWV0aG9kcy5oIgorCQkJCVJlbGF0aXZl
UGF0aD0iLi5cLi5caGVhcFxNYXJrU3RhY2tJbmxpbmVzLmgiCiAJCQkJPgogCQkJPC9GaWxlPgog
CQkJPEZpbGUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxMzM5
NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTk2LDkgKzE5Niw5IEBACiAJCTBGQjdG
Mzk1MTVFRDhFNDYwMEYxNjdCMiAvKiBBcnJheUNvbnZlbnRpb25zLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI3RjM4OTE1RUQ4RTM4MDBGMTY3QjIg
LyogQXJyYXlDb252ZW50aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGQjdGMzk2MTVFRDhFNDYwMEYxNjdCMiAvKiBBcnJheVN0b3JhZ2Uu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjdGMzhB
MTVFRDhFMzgwMEYxNjdCMiAvKiBBcnJheVN0b3JhZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkI3RjM5NzE1RUQ4RTQ2MDBGMTY3QjIgLyog
QnV0dGVyZmx5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkI3RjM4QjE1RUQ4RTM4MDBGMTY3QjIgLyogQnV0dGVyZmx5LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEZCN0YzOTgxNUVEOEU0NjAwRjE2
N0IyIC8qIEJ1dHRlcmZseUlubGluZU1ldGhvZHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjdGMzhDMTVFRDhFMzgwMEYxNjdCMiAvKiBCdXR0ZXJm
bHlJbmxpbmVNZXRob2RzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMEZCN0YzOTgxNUVEOEU0NjAwRjE2N0IyIC8qIEJ1dHRlcmZseUlubGluZXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjdGMzhD
MTVFRDhFMzgwMEYxNjdCMiAvKiBCdXR0ZXJmbHlJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZCN0YzOTkxNUVEOEU0NjAwRjE2N0Iy
IC8qIEluZGV4aW5nSGVhZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkI3RjM4RDE1RUQ4RTM4MDBGMTY3QjIgLyogSW5kZXhpbmdIZWFkZXIuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkwRkI3RjM5
QTE1RUQ4RTQ2MDBGMTY3QjIgLyogSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI3RjM4RTE1RUQ4RTM4
MDBGMTY3QjIgLyogSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZCN0YzOUExNUVEOEU0NjAwRjE2
N0IyIC8qIEluZGV4aW5nSGVhZGVySW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCN0YzOEUxNUVEOEUzODAwRjE2N0IyIC8qIEluZGV4aW5n
SGVhZGVySW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGQjdGMzlCMTVFRDhFNDYwMEYxNjdCMiAvKiBJbmRleGluZ1R5cGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjdGMzhGMTVFRDhF
MzgwMEYxNjdCMiAvKiBJbmRleGluZ1R5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkI3RjM5QzE1RUQ4RTQ2MDBGMTY3QjIgLyogUHJvcGVy
dHlTdG9yYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkI3RjM5MDE1RUQ4RTM4MDBGMTY3QjIgLyogUHJvcGVydHlTdG9yYWdlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZCN0YzOUQxNUVEOEU0
NjAwRjE2N0IyIC8qIFJlamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZCN0YzOTExNUVEOEUzODAwRjE2N0IyIC8qIFJlamVjdC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC00NTMsNyArNDUzLDcg
QEAKIAkJODYzQzZEOUMxNTIxMTExQTAwNTg1RTRFIC8qIFlhcnJDYW5vbmljYWxpemVVQ1MyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2M0M2RDk4
MTUyMTExMTIwMDU4NUU0RSAvKiBZYXJyQ2Fub25pY2FsaXplVUNTMi5jcHAgKi87IH07CiAJCTg2
NDJDNTEwMTUxQzA2QTkwMDQ2RDRFRiAvKiBSZWdFeHBDYWNoZWRSZXN1bHQuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZGNzVFRkIxNTFDMDYyRjAw
N0M5QkEzIC8qIFJlZ0V4cENhY2hlZFJlc3VsdC5jcHAgKi87IH07CiAJCTg2NDJDNTEyMTUxQzA4
M0QwMDQ2RDRFRiAvKiBSZWdFeHBNYXRjaGVzQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZGNzVFRkQxNTFDMDYyRjAwN0M5QkEzIC8qIFJl
Z0V4cE1hdGNoZXNBcnJheS5jcHAgKi87IH07Ci0JCTg2NUEzMEYxMTM1MDA3RTEwMENEQjQ5RSAv
KiBKU1ZhbHVlSW5saW5lTWV0aG9kcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gODY1QTMwRjAxMzUwMDdFMTAwQ0RCNDlFIC8qIEpTVmFsdWVJbmxpbmVN
ZXRob2RzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJODY1QTMwRjExMzUwMDdFMTAwQ0RCNDlFIC8qIEpTVmFsdWVJbmxpbmVzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NjVBMzBGMDEzNTAwN0UxMDBD
REI0OUUgLyogSlNWYWx1ZUlubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk4NjVGNDA4ODEwRTdENTYzMDA5NDczNjEgLyogQVBJU2hpbXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2NUY0MDg3
MTBFN0Q1NjMwMDk0NzM2MSAvKiBBUElTaGltcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTg2NjczOUQyMTNCRkRFNzEwMDIzRDg3QyAvKiBCaWdJ
bnRlZ2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4
NjY3MzlEMDEzQkZERTcxMDAyM0Q4N0MgLyogQmlnSW50ZWdlci5oICovOyB9OwogCQk4NjY3MzlE
MzEzQkZERTcxMDAyM0Q4N0MgLyogVWludDE2V2l0aEZyYWN0aW9uLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NjY3MzlEMTEzQkZERTcxMDAyM0Q4N0Mg
LyogVWludDE2V2l0aEZyYWN0aW9uLmggKi87IH07CkBAIC00ODksNyArNDg5LDcgQEAKIAkJODZD
NTY4RTIxMUEyMTNFRTAwMDdGN0YwIC8qIE1JUFNBc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2QzU2OERGMTFBMjEzRUUwMDA3RjdGMCAv
KiBNSVBTQXNzZW1ibGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJODZDQTAzMkUxMDM4RTg0NDAwMjhBNjA5IC8qIEV4ZWN1dGFibGUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZDQTAzMkQxMDM4
RTg0NDAwMjhBNjA5IC8qIEV4ZWN1dGFibGUuY3BwICovOyB9OwogCQk4NkNBRkVFMzEwMzVEREU2
MDAyOEE2MDkgLyogRXhlY3V0YWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gODZDQUZFRTIxMDM1RERFNjAwMjhBNjA5IC8qIEV4ZWN1dGFibGUuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk4NkNDODVB
MTBFRTc5QTQ3MDAyODg2ODIgLyogSklUSW5saW5lTWV0aG9kcy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZDQzg1QTAwRUU3OUE0NzAwMjg4NjgyIC8q
IEpJVElubGluZU1ldGhvZHMuaCAqLzsgfTsKKwkJODZDQzg1QTEwRUU3OUE0NzAwMjg4NjgyIC8q
IEpJVElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDg2Q0M4NUEwMEVFNzlBNDcwMDI4ODY4MiAvKiBKSVRJbmxpbmVzLmggKi87IH07CiAJCTg2
Q0M4NUEzMEVFNzlCNzQwMDI4ODY4MiAvKiBKSVRDYWxsLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2Q0M4NUEyMEVFNzlCNzQwMDI4ODY4MiAvKiBK
SVRDYWxsLmNwcCAqLzsgfTsKIAkJODZDQzg1QzQwRUU3QTg5NDAwMjg4NjgyIC8qIEpJVFByb3Bl
cnR5QWNjZXNzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDg2Q0M4NUMzMEVFN0E4OTQwMDI4ODY4MiAvKiBKSVRQcm9wZXJ0eUFjY2Vzcy5jcHAgKi87
IH07CiAJCTg2Q0NFRkRFMEY0MTNGODkwMEZEN0Y5RSAvKiBKSVRDb2RlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkNDRUZERDBGNDEzRjg5MDBGRDdG
OUUgLyogSklUQ29kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CkBAIC03MTQsMTEgKzcxNCwxMSBAQAogCQlCQ0ZEOEM5MzBFRUIyRUU3MDAyODM4NDgg
LyogSnVtcFRhYmxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCQ0ZEOEM5MTBFRUIyRUU3MDAyODM4NDggLyogSnVtcFRhYmxlLmggKi87IH07CiAJCUMy
MTEyMkUxMTVERDlBQjMwMDc5MEUzQSAvKiBHQ1RocmVhZFNoYXJlZERhdGEuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzIxMTIyREUxNUREOUFCMzAw
NzkwRTNBIC8qIEdDVGhyZWFkU2hhcmVkRGF0YS5jcHAgKi87IH07CiAJCUMyMTEyMkUyMTVERDlB
QjMwMDc5MEUzQSAvKiBHQ1RocmVhZFNoYXJlZERhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMTEyMkRGMTVERDlBQjMwMDc5MEUzQSAvKiBHQ1Ro
cmVhZFNoYXJlZERhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwotCQlDMjExMjJFMzE1REQ5QUIzMDA3OTBFM0EgLyogTWFya1N0YWNrSW5saW5lTWV0
aG9kcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzIx
MTIyRTAxNUREOUFCMzAwNzkwRTNBIC8qIE1hcmtTdGFja0lubGluZU1ldGhvZHMuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlDMjE2MEZFNzE1RjdF
OTVFMDA5NDJERkMgLyogU2xvdFZpc2l0b3JJbmxpbmVNZXRob2RzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNCNDA4NTE1QzBBM0MzMDA0ODkzMkIg
LyogU2xvdFZpc2l0b3JJbmxpbmVNZXRob2RzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQzIxMTIyRTMxNUREOUFCMzAwNzkwRTNBIC8qIE1hcmtT
dGFja0lubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEMyMTEyMkUwMTVERDlBQjMwMDc5MEUzQSAvKiBNYXJrU3RhY2tJbmxpbmVzLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQzIxNjBGRTcxNUY3
RTk1RTAwOTQyREZDIC8qIFNsb3RWaXNpdG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDQjQwODUxNUMwQTNDMzAwNDg5MzJCIC8qIFNs
b3RWaXNpdG9ySW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCUMyMjM5RDE3MTYyNjJCREQwMDVBQzVGRCAvKiBDb3B5VmlzaXRvci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjIzOUQxMjE2
MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3IuY3BwICovOyB9OwogCQlDMjIzOUQxODE2MjYy
QkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEMyMjM5RDEzMTYyNjJCREQwMDVBQzVGRCAvKiBDb3B5VmlzaXRv
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUMy
MjM5RDE5MTYyNjJCREQwMDVBQzVGRCAvKiBDb3B5VmlzaXRvcklubGluZU1ldGhvZHMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMjM5RDE0MTYyNjJC
REQwMDVBQzVGRCAvKiBDb3B5VmlzaXRvcklubGluZU1ldGhvZHMuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlDMjIzOUQxOTE2MjYyQkREMDA1QUM1
RkQgLyogQ29weVZpc2l0b3JJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBDMjIzOUQxNDE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3JJ
bmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJQzIyMzlEMUExNjI2MkJERDAwNUFDNUZEIC8qIEdDVGhyZWFkLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMjM5RDE1MTYyNjJCREQwMDVBQzVG
RCAvKiBHQ1RocmVhZC5jcHAgKi87IH07CiAJCUMyMjM5RDFCMTYyNjJCREQwMDVBQzVGRCAvKiBH
Q1RocmVhZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QzIyMzlEMTYxNjI2MkJERDAwNUFDNUZEIC8qIEdDVGhyZWFkLmggKi87IH07CiAJCUMyMjU0OTQz
MTVGN0RCQUEwMDY1RTg5OCAvKiBTbG90VmlzaXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjI1NDk0MjE1RjdEQkFBMDA2NUU4OTggLyogU2xv
dFZpc2l0b3IuY3BwICovOyB9OwpAQCAtNzMxLDcgKzczMSw3IEBACiAJCUMyQTdGNjg4MTYwNDMy
RDQwMEY3NkI5OCAvKiBKU0Rlc3RydWN0aWJsZU9iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJBN0Y2ODcxNjA0MzJENDAwRjc2Qjk4IC8qIEpT
RGVzdHJ1Y3RpYmxlT2JqZWN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJQzJCOTE2QzIxNERBMDE0RTAwQ0JBQzg2IC8qIE1hcmtlZEFsbG9jYXRv
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJCOTE2
QzExNERBMDE0RTAwQ0JBQzg2IC8qIE1hcmtlZEFsbG9jYXRvci5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUMyQjkxNkM1MTREQTA0MEMwMENCQUM4
NiAvKiBNYXJrZWRBbGxvY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQzJCOTE2QzQxNERBMDQwQzAwQ0JBQzg2IC8qIE1hcmtlZEFsbG9jYXRv
ci5jcHAgKi87IH07Ci0JCUMyQzhEMDJEMTRBM0M2RTAwMDU3OEU2NSAvKiBDb3BpZWRTcGFjZUlu
bGluZU1ldGhvZHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEMyQzhEMDJCMTRBM0M2QjIwMDU3OEU2NSAvKiBDb3BpZWRTcGFjZUlubGluZU1ldGhvZHMu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlDMkM4
RDAyRDE0QTNDNkUwMDA1NzhFNjUgLyogQ29waWVkU3BhY2VJbmxpbmVzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkM4RDAyQjE0QTNDNkIyMDA1NzhF
NjUgLyogQ29waWVkU3BhY2VJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJQzJDOEQwMzAxNEEzQ0VGQzAwNTc4RTY1IC8qIENvcGllZEJs
b2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkM4
RDAyRTE0QTNDRUZDMDA1NzhFNjUgLyogQ29waWVkQmxvY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlDMkM4RDAzMTE0QTNDRUZDMDA1NzhFNjUg
LyogSGVhcEJsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBDMkM4RDAyRjE0QTNDRUZDMDA1NzhFNjUgLyogSGVhcEJsb2NrLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQzJENThDMzQxNTkxMkZFRTAw
MjFBODQ0IC8qIEdDQWN0aXZpdHlDYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkQ1OEMzMzE1OTEyRkVFMDAyMUE4NDQgLyogR0NBY3Rp
dml0eUNhbGxiYWNrLmNwcCAqLzsgfTsKQEAgLTk4NSw5ICs5ODUsOSBAQAogCQkwRkI3RjM4OTE1
RUQ4RTM4MDBGMTY3QjIgLyogQXJyYXlDb252ZW50aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBBcnJheUNvbnZlbnRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGQjdGMzhBMTVFRDhFMzgwMEYxNjdCMiAvKiBBcnJheVN0b3JhZ2UuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXJyYXlTdG9yYWdlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGQjdGMzhCMTVFRDhFMzgwMEYxNjdCMiAvKiBCdXR0ZXJmbHkuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQnV0dGVyZmx5Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTBGQjdGMzhDMTVFRDhFMzgwMEYxNjdCMiAvKiBCdXR0ZXJmbHlJ
bmxpbmVNZXRob2RzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ1dHRlcmZs
eUlubGluZU1ldGhvZHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCN0YzOEMx
NUVEOEUzODAwRjE2N0IyIC8qIEJ1dHRlcmZseUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQnV0dGVyZmx5SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRkI3RjM4RDE1RUQ4RTM4MDBGMTY3QjIgLyogSW5kZXhpbmdIZWFkZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5kZXhpbmdIZWFkZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEZCN0YzOEUxNUVEOEUzODAwRjE2N0IyIC8qIEluZGV4aW5n
SGVhZGVySW5saW5lTWV0aG9kcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJ
bmRleGluZ0hlYWRlcklubGluZU1ldGhvZHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZCN0YzOEUxNUVEOEUzODAwRjE2N0IyIC8qIEluZGV4aW5nSGVhZGVySW5saW5lcy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmRleGluZ0hlYWRlcklubGluZXMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCN0YzOEYxNUVEOEUzODAwRjE2N0IyIC8q
IEluZGV4aW5nVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmRleGlu
Z1R5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCN0YzOTAxNUVEOEUzODAw
RjE2N0IyIC8qIFByb3BlcnR5U3RvcmFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBQcm9wZXJ0eVN0b3JhZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZC
N0YzOTExNUVEOEUzODAwRjE2N0IyIC8qIFJlamVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBSZWplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwMTIs
NyArMTAxMiw3IEBACiAJCTBGQzgxNTA5MTQwNDNCRDIwMENGQTYwMyAvKiBXcml0ZUJhcnJpZXJT
dXBwb3J0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdyaXRlQmFycmllclN1
cHBvcnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZDODE1MTIxNDA1MTE4NjAw
Q0ZBNjAzIC8qIFZUYWJsZVNwZWN0cnVtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFZUYWJsZVNwZWN0cnVtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEZDODE1MTQxNDA1MTE4RDAwQ0ZBNjAzIC8qIFZUYWJsZVNwZWN0cnVtLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZUYWJsZVNwZWN0cnVtLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTBGQ0I0MDg1MTVDMEEzQzMwMDQ4OTMyQiAvKiBTbG90VmlzaXRvcklu
bGluZU1ldGhvZHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2xvdFZpc2l0
b3JJbmxpbmVNZXRob2RzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQ0I0MDg1
MTVDMEEzQzMwMDQ4OTMyQiAvKiBTbG90VmlzaXRvcklubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU2xvdFZpc2l0b3JJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGRDNDODIwMTQxMTVDRjgwMEZEODFDQiAvKiBERkdEcml2ZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHRHJpdmVyLmNwcDsgcGF0aCA9
IGRmZy9ERkdEcml2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQzQzgy
MjE0MTE1RDBFMDBGRDgxQ0IgLyogREZHRHJpdmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERGR0RyaXZlci5oOyBwYXRoID0gZGZnL0RGR0RyaXZlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRkQ4MUFDRjE1NEZCNEVCMDA5ODNFNzIgLyogREZHRG9taW5h
dG9ycy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdEb21pbmF0
b3JzLmNwcDsgcGF0aCA9IGRmZy9ERkdEb21pbmF0b3JzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTEyMzIsNyArMTIzMiw3IEBACiAJCTg2M0M2RDk4MTUyMTExMTIwMDU4NUU0
RSAvKiBZYXJyQ2Fub25pY2FsaXplVUNTMi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBZYXJyQ2Fub25pY2FsaXplVUNTMi5jcHA7IHBhdGggPSB5YXJyL1lhcnJDYW5v
bmljYWxpemVVQ1MyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODYzQzZEOTkx
NTIxMTExMjAwNTg1RTRFIC8qIFlhcnJDYW5vbmljYWxpemVVQ1MyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IFlhcnJDYW5vbmljYWxpemVVQ1MyLmg7IHBhdGggPSB5YXJyL1lh
cnJDYW5vbmljYWxpemVVQ1MyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2M0M2
RDlBMTUyMTExMTIwMDU4NUU0RSAvKiBZYXJyQ2Fub25pY2FsaXplVUNTMi5qcyAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgbmFtZSA9IFlhcnJDYW5vbmljYWxpemVVQ1MyLmpzOyBw
YXRoID0geWFyci9ZYXJyQ2Fub25pY2FsaXplVUNTMi5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJODY1QTMwRjAxMzUwMDdFMTAwQ0RCNDlFIC8qIEpTVmFsdWVJbmxpbmVNZXRob2Rz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTVmFsdWVJbmxpbmVNZXRob2Rz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg2NUEzMEYwMTM1MDA3RTEwMENEQjQ5
RSAvKiBKU1ZhbHVlSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBK
U1ZhbHVlSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NjVGNDA4NzEw
RTdENTYzMDA5NDczNjEgLyogQVBJU2hpbXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQVBJU2hpbXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODY2NzM5RDAx
M0JGREU3MTAwMjNEODdDIC8qIEJpZ0ludGVnZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQmlnSW50ZWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NjY3
MzlEMTEzQkZERTcxMDAyM0Q4N0MgLyogVWludDE2V2l0aEZyYWN0aW9uLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVpbnQxNldpdGhGcmFjdGlvbi5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMTI3NCw3ICsxMjc0LDcgQEAKIAkJODZDNTY4REYxMUEyMTNFRTAw
MDdGN0YwIC8qIE1JUFNBc3NlbWJsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gTUlQU0Fzc2VtYmxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkNBMDMy
RDEwMzhFODQ0MDAyOEE2MDkgLyogRXhlY3V0YWJsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBFeGVjdXRhYmxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJODZDQUZFRTIxMDM1RERFNjAwMjhBNjA5IC8qIEV4ZWN1dGFibGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXhlY3V0YWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQk4NkNDODVBMDBFRTc5QTQ3MDAyODg2ODIgLyogSklUSW5saW5lTWV0aG9kcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKSVRJbmxpbmVNZXRob2RzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg2Q0M4NUEwMEVFNzlBNDcwMDI4ODY4MiAvKiBK
SVRJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVElubGluZXMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZDQzg1QTIwRUU3OUI3NDAwMjg4Njgy
IC8qIEpJVENhbGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSklU
Q2FsbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2Q0M4NUMzMEVFN0E4OTQw
MDI4ODY4MiAvKiBKSVRQcm9wZXJ0eUFjY2Vzcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBKSVRQcm9wZXJ0eUFjY2Vzcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTg2Q0NFRkREMEY0MTNGODkwMEZEN0Y5RSAvKiBKSVRDb2RlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVENvZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTE1MDcsMTAgKzE1MDcsMTAgQEAKIAkJQkNGRDhDOTEwRUVCMkVFNzAwMjgzODQ4
IC8qIEp1bXBUYWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKdW1wVGFi
bGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIxMTIyREUxNUREOUFCMzAwNzkw
RTNBIC8qIEdDVGhyZWFkU2hhcmVkRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBHQ1RocmVhZFNoYXJlZERhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlDMjExMjJERjE1REQ5QUIzMDA3OTBFM0EgLyogR0NUaHJlYWRTaGFyZWREYXRhLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdDVGhyZWFkU2hhcmVkRGF0YS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDMjExMjJFMDE1REQ5QUIzMDA3OTBFM0EgLyog
TWFya1N0YWNrSW5saW5lTWV0aG9kcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBNYXJrU3RhY2tJbmxpbmVNZXRob2RzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUMyMTEyMkUwMTVERDlBQjMwMDc5MEUzQSAvKiBNYXJrU3RhY2tJbmxpbmVzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hcmtTdGFja0lubGluZXMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQzIyMzlEMTIxNjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNpdG9y
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvcHlWaXNpdG9yLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIyMzlEMTMxNjI2MkJERDAwNUFDNUZE
IC8qIENvcHlWaXNpdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvcHlW
aXNpdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUMyMjM5RDE0MTYyNjJCREQw
MDVBQzVGRCAvKiBDb3B5VmlzaXRvcklubGluZU1ldGhvZHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQ29weVZpc2l0b3JJbmxpbmVNZXRob2RzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUMyMjM5RDE0MTYyNjJCREQwMDVBQzVGRCAvKiBDb3B5VmlzaXRvcklu
bGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29weVZpc2l0b3JJbmxp
bmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMjM5RDE1MTYyNjJCREQwMDVB
QzVGRCAvKiBHQ1RocmVhZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBHQ1RocmVhZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMjM5RDE2MTYy
NjJCREQwMDVBQzVGRCAvKiBHQ1RocmVhZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBHQ1RocmVhZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjI1NDk0MjE1
RjdEQkFBMDA2NUU4OTggLyogU2xvdFZpc2l0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gU2xvdFZpc2l0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMTUyMiw3ICsxNTIyLDcgQEAKIAkJQzJBN0Y2ODcxNjA0MzJENDAwRjc2Qjk4IC8qIEpT
RGVzdHJ1Y3RpYmxlT2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpT
RGVzdHJ1Y3RpYmxlT2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyQjkx
NkMxMTREQTAxNEUwMENCQUM4NiAvKiBNYXJrZWRBbGxvY2F0b3IuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gTWFya2VkQWxsb2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUMyQjkxNkM0MTREQTA0MEMwMENCQUM4NiAvKiBNYXJrZWRBbGxvY2F0b3IuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFya2VkQWxsb2NhdG9yLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzJDOEQwMkIxNEEzQzZCMjAwNTc4RTY1
IC8qIENvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBDb3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQzJDOEQwMkIxNEEzQzZCMjAwNTc4RTY1IC8qIENvcGllZFNwYWNlSW5saW5lcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb3BpZWRTcGFjZUlubGluZXMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzJDOEQwMkUxNEEzQ0VGQzAwNTc4RTY1IC8q
IENvcGllZEJsb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvcGllZEJs
b2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyQzhEMDJGMTRBM0NFRkMwMDU3
OEU2NSAvKiBIZWFwQmxvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGVh
cEJsb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyRDU4QzMzMTU5MTJGRUUw
MDIxQTg0NCAvKiBHQ0FjdGl2aXR5Q2FsbGJhY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gR0NBY3Rpdml0eUNhbGxiYWNrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTE4MjIsNyArMTgyMiw3IEBACiAJCQkJMEYyMUMyNjYxNEJFNUY1RTAwQURD
NjRCIC8qIEpJVERyaXZlci5oICovLAogCQkJCTBGNDY4MDdGMTRCQTU3MjcwMEJGRTI3MiAvKiBK
SVRFeGNlcHRpb25zLmNwcCAqLywKIAkJCQkwRjQ2ODA4MDE0QkE1NzI3MDBCRkUyNzIgLyogSklU
RXhjZXB0aW9ucy5oICovLAotCQkJCTg2Q0M4NUEwMEVFNzlBNDcwMDI4ODY4MiAvKiBKSVRJbmxp
bmVNZXRob2RzLmggKi8sCisJCQkJODZDQzg1QTAwRUU3OUE0NzAwMjg4NjgyIC8qIEpJVElubGlu
ZXMuaCAqLywKIAkJCQlCQ0RENTFFOTBGQjhERjc0MDA0QThCREMgLyogSklUT3Bjb2Rlcy5jcHAg
Ki8sCiAJCQkJQTcxMjM2RTQxMTk1RjMzQzAwQkQyMTc0IC8qIEpJVE9wY29kZXMzMl82NC5jcHAg
Ki8sCiAJCQkJODZDQzg1QzMwRUU3QTg5NDAwMjg4NjgyIC8qIEpJVFByb3BlcnR5QWNjZXNzLmNw
cCAqLywKQEAgLTE4NDgsNyArMTg0OCw3IEBACiAJCQljaGlsZHJlbiA9ICgKIAkJCQlDMjIzOUQx
MjE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3IuY3BwICovLAogCQkJCUMyMjM5RDEzMTYy
NjJCREQwMDVBQzVGRCAvKiBDb3B5VmlzaXRvci5oICovLAotCQkJCUMyMjM5RDE0MTYyNjJCREQw
MDVBQzVGRCAvKiBDb3B5VmlzaXRvcklubGluZU1ldGhvZHMuaCAqLywKKwkJCQlDMjIzOUQxNDE2
MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3JJbmxpbmVzLmggKi8sCiAJCQkJQzIyMzlEMTUx
NjI2MkJERDAwNUFDNUZEIC8qIEdDVGhyZWFkLmNwcCAqLywKIAkJCQlDMjIzOUQxNjE2MjYyQkRE
MDA1QUM1RkQgLyogR0NUaHJlYWQuaCAqLywKIAkJCQlDMjREMzFFMDE2MUNENjk1MDAyQUE0REIg
LyogSGVhcFN0YXRpc3RpY3MuY3BwICovLApAQCAtMTg1Niw3ICsxODU2LDcgQEAKIAkJCQlDMjI1
NDk0MjE1RjdEQkFBMDA2NUU4OTggLyogU2xvdFZpc2l0b3IuY3BwICovLAogCQkJCUMyMTEyMkRF
MTVERDlBQjMwMDc5MEUzQSAvKiBHQ1RocmVhZFNoYXJlZERhdGEuY3BwICovLAogCQkJCUMyMTEy
MkRGMTVERDlBQjMwMDc5MEUzQSAvKiBHQ1RocmVhZFNoYXJlZERhdGEuaCAqLywKLQkJCQlDMjEx
MjJFMDE1REQ5QUIzMDA3OTBFM0EgLyogTWFya1N0YWNrSW5saW5lTWV0aG9kcy5oICovLAorCQkJ
CUMyMTEyMkUwMTVERDlBQjMwMDc5MEUzQSAvKiBNYXJrU3RhY2tJbmxpbmVzLmggKi8sCiAJCQkJ
QzJFNTI2QkIxNTkwRUYwMDAwNTRFNDhEIC8qIEhlYXBUaW1lci5jcHAgKi8sCiAJCQkJQzJFNTI2
QkMxNTkwRUYwMDAwNTRFNDhEIC8qIEhlYXBUaW1lci5oICovLAogCQkJCUMyNUY4QkNCMTU3NTQ0
QTkwMDI0NUI3MSAvKiBJbmNyZW1lbnRhbFN3ZWVwZXIuY3BwICovLApAQCAtMTg3MCw3ICsxODcw
LDcgQEAKIAkJCQlDMkM4RDAyRTE0QTNDRUZDMDA1NzhFNjUgLyogQ29waWVkQmxvY2suaCAqLywK
IAkJCQlDMjQwMzA1MzE0QjQwNEM5MDA3OUVCNjQgLyogQ29waWVkU3BhY2UuY3BwICovLAogCQkJ
CUMyRUFBM0Y4MTQ5QTgzMDgwMEZDRTExMiAvKiBDb3BpZWRTcGFjZS5oICovLAotCQkJCUMyQzhE
MDJCMTRBM0M2QjIwMDU3OEU2NSAvKiBDb3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaCAqLywKKwkJ
CQlDMkM4RDAyQjE0QTNDNkIyMDA1NzhFNjUgLyogQ29waWVkU3BhY2VJbmxpbmVzLmggKi8sCiAJ
CQkJMEYyQzU1NkQxNDczOEYyRTAwMTIxRTRGIC8qIERGR0NvZGVCbG9ja3MuY3BwICovLAogCQkJ
CTBGMkM1NTZFMTQ3MzhGMkUwMDEyMUU0RiAvKiBERkdDb2RlQmxvY2tzLmggKi8sCiAJCQkJQkNC
RTJDQUQxNEU5ODVBQTAwMDU5M0FEIC8qIEdDQXNzZXJ0aW9ucy5oICovLApAQCAtMTkwMiw3ICsx
OTAyLDcgQEAKIAkJCQkxNDJENkYwRjEzNTM5QTQxMDBCMDJFODYgLyogTWFya1N0YWNrLmggKi8s
CiAJCQkJMTQ5NzIwOTAxNEVCODMxNTAwRkVCMUI3IC8qIFBhc3NXZWFrLmggKi8sCiAJCQkJMTRC
QTc4RjAxM0FBQjg4RjAwNUI3QzJDIC8qIFNsb3RWaXNpdG9yLmggKi8sCi0JCQkJMEZDQjQwODUx
NUMwQTNDMzAwNDg5MzJCIC8qIFNsb3RWaXNpdG9ySW5saW5lTWV0aG9kcy5oICovLAorCQkJCTBG
Q0I0MDg1MTVDMEEzQzMwMDQ4OTMyQiAvKiBTbG90VmlzaXRvcklubGluZXMuaCAqLywKIAkJCQkx
NDJFMzEzMjEzNEZGMEE2MDBBRkFEQjUgLyogU3Ryb25nLmggKi8sCiAJCQkJMTQ1NzIyODUxNDM3
RTE0MDAwNUZERTI2IC8qIFN0cm9uZ0lubGluZXMuaCAqLywKIAkJCQkxNDE0NDhDQzEzQTE3ODM3
MDBGNUJBMUEgLyogVGlueUJsb29tRmlsdGVyLmggKi8sCkBAIC0yMTA2LDcgKzIxMDYsNyBAQAog
CQkJCUJDNzk1MjM0MEUxNUVCNTYwMEE4OThBQiAvKiBCb29sZWFuUHJvdG90eXBlLmNwcCAqLywK
IAkJCQlCQzc5NTIzNTBFMTVFQjU2MDBBODk4QUIgLyogQm9vbGVhblByb3RvdHlwZS5oICovLAog
CQkJCTBGQjdGMzhCMTVFRDhFMzgwMEYxNjdCMiAvKiBCdXR0ZXJmbHkuaCAqLywKLQkJCQkwRkI3
RjM4QzE1RUQ4RTM4MDBGMTY3QjIgLyogQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oICovLAorCQkJ
CTBGQjdGMzhDMTVFRDhFMzgwMEYxNjdCMiAvKiBCdXR0ZXJmbHlJbmxpbmVzLmggKi8sCiAJCQkJ
ODY5RDA0QUUxMTkzQjU0RDAwODAzNDc1IC8qIENhY2hlZFRyYW5zY2VuZGVudGFsRnVuY3Rpb24u
aCAqLywKIAkJCQlCQ0E2MkRGRTBFMjgyNjIzMDAwNEYzMEQgLyogQ2FsbERhdGEuY3BwICovLAog
CQkJCTE0NUM1MDdGMEQ5REY2M0IwMDg4RjZCOSAvKiBDYWxsRGF0YS5oICovLApAQCAtMjE1Miw3
ICsyMTUyLDcgQEAKIAkJCQk5MzNBMzQ5RDAzOEFFODBGMDA4NjM1Q0UgLyogSWRlbnRpZmllci5j
cHAgKi8sCiAJCQkJOTMzQTM0OUEwMzhBRTdDNjAwODYzNUNFIC8qIElkZW50aWZpZXIuaCAqLywK
IAkJCQkwRkI3RjM4RDE1RUQ4RTM4MDBGMTY3QjIgLyogSW5kZXhpbmdIZWFkZXIuaCAqLywKLQkJ
CQkwRkI3RjM4RTE1RUQ4RTM4MDBGMTY3QjIgLyogSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2Rz
LmggKi8sCisJCQkJMEZCN0YzOEUxNUVEOEUzODAwRjE2N0IyIC8qIEluZGV4aW5nSGVhZGVySW5s
aW5lcy5oICovLAogCQkJCTBGMTNFMDRDMTYxNjRBMUIwMERDOERFNyAvKiBJbmRleGluZ1R5cGUu
Y3BwICovLAogCQkJCTBGQjdGMzhGMTVFRDhFMzgwMEYxNjdCMiAvKiBJbmRleGluZ1R5cGUuaCAq
LywKIAkJCQlFMTc4NjM2QzBEOUJFRUMzMDBENzRFNzUgLyogSW5pdGlhbGl6ZVRocmVhZGluZy5j
cHAgKi8sCkBAIC0yMjA5LDcgKzIyMDksNyBAQAogCQkJCTY1MDdEMjk3MEU4NzFFNEEwMEQ3RDg5
NiAvKiBKU1R5cGVJbmZvLmggKi8sCiAJCQkJRjY5MkE4ODcwMjU1NTk3RDAxRkY2MEY3IC8qIEpT
VmFsdWUuY3BwICovLAogCQkJCTE0QUJCMzZFMDk5QzA3NjQwMEUyQTI0RiAvKiBKU1ZhbHVlLmgg
Ki8sCi0JCQkJODY1QTMwRjAxMzUwMDdFMTAwQ0RCNDlFIC8qIEpTVmFsdWVJbmxpbmVNZXRob2Rz
LmggKi8sCisJCQkJODY1QTMwRjAxMzUwMDdFMTAwQ0RCNDlFIC8qIEpTVmFsdWVJbmxpbmVzLmgg
Ki8sCiAJCQkJQkMyMkEzOUEwRTE2RTE0ODAwQUYyMUM4IC8qIEpTVmFyaWFibGVPYmplY3QuY3Bw
ICovLAogCQkJCTE0RjI1MjU2MEQwOEREOEQwMDRFQ0ZGRiAvKiBKU1ZhcmlhYmxlT2JqZWN0Lmgg
Ki8sCiAJCQkJMTQ0MjU2NUYxNUVERTk4RDAwNjZBNDlCIC8qIEpTV2l0aFNjb3BlLmNwcCAqLywK
QEAgLTI2MjUsMTQgKzI2MjUsMTQgQEAKIAkJCQlDMkI5MTZDMjE0REEwMTRFMDBDQkFDODYgLyog
TWFya2VkQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTRBMzMyMDE1QkQyRTA3MDA2
RjU0RjMgLyogVk1JbnNwZWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyMjM5RDE4MTYyNjJC
REQwMDVBQzVGRCAvKiBDb3B5VmlzaXRvci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQzIyMzlEMTkx
NjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNpdG9ySW5saW5lTWV0aG9kcy5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJQzIyMzlEMTkxNjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNpdG9ySW5saW5lcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQzI0RDMxRTMxNjFDRDY5NTAwMkFBNERCIC8qIEhlYXBTdGF0
aXN0aWNzLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMkE3RjY4ODE2MDQzMkQ0MDBGNzZCOTggLyog
SlNEZXN0cnVjdGlibGVPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFMjBDRTlFMTVGMDRB
OTUwMERGMzQzMCAvKiBMTEludENMb29wLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjExMjJFMjE1
REQ5QUIzMDA3OTBFM0EgLyogR0NUaHJlYWRTaGFyZWREYXRhLmggaW4gSGVhZGVycyAqLywKLQkJ
CQlDMjE2MEZFNzE1RjdFOTVFMDA5NDJERkMgLyogU2xvdFZpc2l0b3JJbmxpbmVNZXRob2RzLmgg
aW4gSGVhZGVycyAqLywKKwkJCQlDMjE2MEZFNzE1RjdFOTVFMDA5NDJERkMgLyogU2xvdFZpc2l0
b3JJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMkU1MjZCRTE1OTBFRjAwMDA1NEU0OEQg
LyogSGVhcFRpbWVyLmggaW4gSGVhZGVycyAqLywKLQkJCQlDMjExMjJFMzE1REQ5QUIzMDA3OTBF
M0EgLyogTWFya1N0YWNrSW5saW5lTWV0aG9kcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJQzIxMTIy
RTMxNUREOUFCMzAwNzkwRTNBIC8qIE1hcmtTdGFja0lubGluZXMuaCBpbiBIZWFkZXJzICovLAog
CQkJCUMyNUY4QkNFMTU3NTQ0QTkwMDI0NUI3MSAvKiBJbmNyZW1lbnRhbFN3ZWVwZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDMThDM0U2MEUxNkY1Q0QwMEIzNDQ2MCAvKiBBcnJheUNvbnN0cnVj
dG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNFNzBFMTZGNUNEMDBCMzQ0NjAgLyogQXJy
YXlQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLApAQCAtMjY0NSw3ICsyNjQ1LDcgQEAKIAkJCQlC
QzE4QzNFQzBFMTZGNUNEMDBCMzQ0NjAgLyogQm9vbGVhbk9iamVjdC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQzJDOEQwMzAxNEEzQ0VGQzAwNTc4RTY1IC8qIENvcGllZEJsb2NrLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlDMkVBQTNGQTE0OUE4MzVFMDBGQ0UxMTIgLyogQ29waWVkU3BhY2UuaCBpbiBI
ZWFkZXJzICovLAotCQkJCUMyQzhEMDJEMTRBM0M2RTAwMDU3OEU2NSAvKiBDb3BpZWRTcGFjZUlu
bGluZU1ldGhvZHMuaCBpbiBIZWFkZXJzICovLAorCQkJCUMyQzhEMDJEMTRBM0M2RTAwMDU3OEU2
NSAvKiBDb3BpZWRTcGFjZUlubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTk2OUEwNzIzMEVE
MUNFMzMwMEYxRjY4MSAvKiBCeXRlY29kZUdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
ODY5RDA0QUYxMTkzQjU0RDAwODAzNDc1IC8qIENhY2hlZFRyYW5zY2VuZGVudGFsRnVuY3Rpb24u
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0VEMEUxNkY1Q0QwMEIzNDQ2MCAvKiBDYWxsRGF0
YS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNzI3LDcgKzI3MjcsNyBAQAogCQkJCUJDMThDNDE1MEUx
NkY1Q0QwMEIzNDQ2MCAvKiBKYXZhU2NyaXB0Q29yZVByZWZpeC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMTQyOUQ5MzAwRUQyMkQ3MDAwQjg5NjE5IC8qIEpJVC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
ODZDQ0VGREUwRjQxM0Y4OTAwRkQ3RjlFIC8qIEpJVENvZGUuaCBpbiBIZWFkZXJzICovLAotCQkJ
CTg2Q0M4NUExMEVFNzlBNDcwMDI4ODY4MiAvKiBKSVRJbmxpbmVNZXRob2RzLmggaW4gSGVhZGVy
cyAqLywKKwkJCQk4NkNDODVBMTBFRTc5QTQ3MDAyODg2ODIgLyogSklUSW5saW5lcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJOTYwNjI2OTYwRkI4RUMwMjAwOTc5OEFCIC8qIEpJVFN0dWJDYWxsLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxNEM1MjQyQjBGNTM1NUU5MDBCQTNEMDQgLyogSklUU3R1YnMu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE3NkY1NEEzMTNCMjhBQUIwMEVGMkJDRSAvKiBKSVRXcml0
ZUJhcnJpZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMjc2OSw3ICsyNzY5LDcgQEAKIAkJCQlCQzE4
QzQyQTBFMTZGNUNEMDBCMzQ0NjAgLyogSlNUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk2NTA3
RDI5RTBFODcxRTVFMDBEN0Q4OTYgLyogSlNUeXBlSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkMxOEM0MkIwRTE2RjVDRDAwQjM0NDYwIC8qIEpTVmFsdWUuaCBpbiBIZWFkZXJzICovLAotCQkJ
CTg2NUEzMEYxMTM1MDA3RTEwMENEQjQ5RSAvKiBKU1ZhbHVlSW5saW5lTWV0aG9kcy5oIGluIEhl
YWRlcnMgKi8sCisJCQkJODY1QTMwRjExMzUwMDdFMTAwQ0RCNDlFIC8qIEpTVmFsdWVJbmxpbmVz
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQyQzBFMTZGNUNEMDBCMzQ0NjAgLyogSlNWYWx1
ZVJlZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MkQwRTE2RjVDRDAwQjM0NDYwIC8qIEpT
VmFyaWFibGVPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NDgyRTkzMTE2QTdDQUQwMDNC
MDcxMiAvKiBKU1dlYWtPYmplY3RNYXBSZWZJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCkBAIC0z
MDAzLDkgKzMwMDMsOSBAQAogCQkJCTBGQjdGMzk1MTVFRDhFNDYwMEYxNjdCMiAvKiBBcnJheUNv
bnZlbnRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkI3RjM5NjE1RUQ4RTQ2MDBGMTY3QjIg
LyogQXJyYXlTdG9yYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkI3RjM5NzE1RUQ4RTQ2MDBG
MTY3QjIgLyogQnV0dGVyZmx5LmggaW4gSGVhZGVycyAqLywKLQkJCQkwRkI3RjM5ODE1RUQ4RTQ2
MDBGMTY3QjIgLyogQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEZCN0YzOTgxNUVEOEU0NjAwRjE2N0IyIC8qIEJ1dHRlcmZseUlubGluZXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGQjdGMzk5MTVFRDhFNDYwMEYxNjdCMiAvKiBJbmRleGluZ0hlYWRlci5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJMEZCN0YzOUExNUVEOEU0NjAwRjE2N0IyIC8qIEluZGV4aW5nSGVh
ZGVySW5saW5lTWV0aG9kcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZCN0YzOUExNUVEOEU0NjAw
RjE2N0IyIC8qIEluZGV4aW5nSGVhZGVySW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZC
N0YzOUIxNUVEOEU0NjAwRjE2N0IyIC8qIEluZGV4aW5nVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZCN0YzOUMxNUVEOEU0NjAwRjE2N0IyIC8qIFByb3BlcnR5U3RvcmFnZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZCN0YzOUQxNUVEOEU0NjAwRjE2N0IyIC8qIFJlamVjdC5oIGluIEhlYWRl
cnMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmNwcAkocmV2aXNpb24gMTMzOTczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAKICNpbmNsdWRl
ICJKU1ZhbHVlLmgiCiAjaW5jbHVkZSAiTG93TGV2ZWxJbnRlcnByZXRlci5oIgogI2luY2x1ZGUg
IlJlcGF0Y2hCdWZmZXIuaCIKLSNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZU1ldGhvZHMuaCIK
KyNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKICNpbmNsdWRlIDxzdGRpby5oPgogI2lu
Y2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2
aXNpb24gMTMzOTczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25z
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsOSArMjcsOSBAQAogI2luY2x1ZGUgIkRGR09wZXJh
dGlvbnMuaCIKIAogI2luY2x1ZGUgIkFyZ3VtZW50cy5oIgotI2luY2x1ZGUgIkJ1dHRlcmZseUlu
bGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJCdXR0ZXJmbHlJbmxpbmVzLmgiCiAjaW5jbHVkZSAi
Q29kZUJsb2NrLmgiCi0jaW5jbHVkZSAiQ29waWVkU3BhY2VJbmxpbmVNZXRob2RzLmgiCisjaW5j
bHVkZSAiQ29waWVkU3BhY2VJbmxpbmVzLmgiCiAjaW5jbHVkZSAiREZHT1NSRXhpdC5oIgogI2lu
Y2x1ZGUgIkRGR1JlcGF0Y2guaCIKICNpbmNsdWRlICJERkdUaHVua3MuaCIKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVSb290cy5jcHAJKHJldmlz
aW9uIDEzMzk3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJv
b3RzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsOSArMjYsOSBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIkNvbnNlcnZhdGl2ZVJvb3RzLmgiCiAKLSNpbmNsdWRlICJDb3BpZWRT
cGFjZS5oIgotI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUg
IkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkNvcGllZFNwYWNlLmgiCisjaW5jbHVkZSAiQ29waWVk
U3BhY2VJbmxpbmVzLmgiCiAjaW5jbHVkZSAiREZHQ29kZUJsb2Nrcy5oIgogI2luY2x1ZGUgIkpT
Q2VsbC5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9Db3BpZWRCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0NvcGllZEJsb2NrLmgJKHJldmlzaW9uIDEzMzk3MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0NvcGllZEJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcg
QEAKICNpbmNsdWRlICJCbG9ja0FsbG9jYXRvci5oIgogI2luY2x1ZGUgIkhlYXBCbG9jay5oIgog
I2luY2x1ZGUgIkpTVmFsdWUuaCIKLSNpbmNsdWRlICJKU1ZhbHVlSW5saW5lTWV0aG9kcy5oIgor
I2luY2x1ZGUgIkpTVmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiT3B0aW9ucy5oIgogI2luY2x1
ZGUgPHd0Zi9BdG9taWNzLmg+CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Nv
cGllZFNwYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9D
b3BpZWRTcGFjZS5jcHAJKHJldmlzaW9uIDEzMzk3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0NvcGllZFNwYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkNvcGllZFNwYWNlLmgiCiAKLSNpbmNsdWRl
ICJDb3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGlu
ZXMuaCIKICNpbmNsdWRlICJHQ0FjdGl2aXR5Q2FsbGJhY2suaCIKICNpbmNsdWRlICJPcHRpb25z
LmgiCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlSW5saW5l
TWV0aG9kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGll
ZFNwYWNlSW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAxMzM5NzMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaAkod29ya2luZyBjb3B5KQpA
QCAtMSwxODUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
LSAqLwotCi0jaWZuZGVmIENvcGllZFNwYWNlSW5saW5lTWV0aG9kc19oCi0jZGVmaW5lIENvcGll
ZFNwYWNlSW5saW5lTWV0aG9kc19oCi0KLSNpbmNsdWRlICJDb3BpZWRCbG9jay5oIgotI2luY2x1
ZGUgIkNvcGllZFNwYWNlLmgiCi0jaW5jbHVkZSAiSGVhcC5oIgotI2luY2x1ZGUgIkhlYXBCbG9j
ay5oIgotI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgotI2luY2x1ZGUgPHd0Zi9DaGVja2VkQm9v
bGVhbi5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotaW5saW5lIGJvb2wgQ29waWVkU3BhY2U6OmNv
bnRhaW5zKENvcGllZEJsb2NrKiBibG9jaykKLXsKLSAgICByZXR1cm4gIW1fYmxvY2tGaWx0ZXIu
cnVsZU91dChyZWludGVycHJldF9jYXN0PEJpdHM+KGJsb2NrKSkgJiYgbV9ibG9ja1NldC5jb250
YWlucyhibG9jayk7Ci19Ci0KLWlubGluZSBib29sIENvcGllZFNwYWNlOjpjb250YWlucyh2b2lk
KiBwdHIsIENvcGllZEJsb2NrKiYgcmVzdWx0KQotewotICAgIENvcGllZEJsb2NrKiBibG9jayA9
IGJsb2NrRm9yKHB0cik7Ci0gICAgaWYgKGNvbnRhaW5zKGJsb2NrKSkgewotICAgICAgICByZXN1
bHQgPSBibG9jazsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGJsb2NrID0gb3Zl
cnNpemVCbG9ja0ZvcihwdHIpOwotICAgIHJlc3VsdCA9IGJsb2NrOwotICAgIHJldHVybiBjb250
YWlucyhibG9jayk7Ci19Ci0KLWlubGluZSB2b2lkIENvcGllZFNwYWNlOjpwaW4oQ29waWVkQmxv
Y2sqIGJsb2NrKQotewotICAgIGJsb2NrLT5tX2lzUGlubmVkID0gdHJ1ZTsKLX0KLQotaW5saW5l
IHZvaWQgQ29waWVkU3BhY2U6OnBpbklmTmVjZXNzYXJ5KHZvaWQqIG9wYXF1ZVBvaW50ZXIpCi17
Ci0gICAgLy8gUG9pbnRlcnMgaW50byB0aGUgY29waWVkIHNwYWNlIGNvbWUgaW4gdGhlIGZvbGxv
d2luZyB2YXJpZXRpZXM6Ci0gICAgLy8gMSkgIFBvaW50ZXJzIHRvIHRoZSBzdGFydCBvZiBhIHNw
YW4gb2YgbWVtb3J5LiBUaGlzIGlzIHRoZSBtb3N0Ci0gICAgLy8gICAgIG5hdHVyYWwgdGhvdWdo
IG5vdCBuZWNlc3NhcmlseSB0aGUgbW9zdCBjb21tb24uCi0gICAgLy8gMikgIFBvaW50ZXJzIHRv
IG9uZSB2YWx1ZS1zaXplZCAoOCBieXRlKSB3b3JkIHBhc3QgdGhlIGVuZCBvZgotICAgIC8vICAg
ICBhIHNwYW4gb2YgbWVtb3J5LiBUaGlzIGN1cnJlbnRseSBvY2N1cnMgd2l0aCBzZW1pLWJ1dHRl
cmZsaWVzCi0gICAgLy8gICAgIGFuZCBzaG91bGQgYmUgZml4ZWQgc29vbiwgb25jZSB0aGUgb3Ro
ZXIgaGFsZiBvZiB0aGUKLSAgICAvLyAgICAgYnV0dGVyZmx5IGxhbmRzLgotICAgIC8vIDMpICBQ
b2ludGVycyB0byB0aGUgaW5uYXJkcyBhcmlzaW5nIGZyb20gbG9vcCBpbmR1Y3Rpb24gdmFyaWFi
bGUKLSAgICAvLyAgICAgb3B0aW1pemF0aW9ucyAoZWl0aGVyIG1hbnVhbCBvbmVzIG9yIGF1dG9t
YXRpYywgYnkgdGhlCi0gICAgLy8gICAgIGNvbXBpbGVyKS4KLSAgICAvLyA0KSAgUG9pbnRlcnMg
dG8gdGhlIGVuZCBvZiBhIHNwYW4gb2YgbWVtb3J5IGluIGFyaXNpbmcgZnJvbQotICAgIC8vICAg
ICBpbmR1Y3Rpb24gdmFyaWFibGUgb3B0aW1pemF0aW9ucyBjb21iaW5lZCB3aXRoIHRoZQotICAg
IC8vICAgICBHQy10by1jb21waWxlciBjb250cmFjdCBsYWlkIG91dCBpbiB0aGUgQyBzcGVjOiBh
IHBvaW50ZXIgdG8KLSAgICAvLyAgICAgdGhlIGVuZCBvZiBhIHNwYW4gb2YgbWVtb3J5IG11c3Qg
YmUgY29uc2lkZXJlZCB0byBiZSBhCi0gICAgLy8gICAgIHBvaW50ZXIgdG8gdGhhdCBtZW1vcnku
Ci0gICAgCi0gICAgRW5jb2RlZEpTVmFsdWUqIHBvaW50ZXIgPSByZWludGVycHJldF9jYXN0PEVu
Y29kZWRKU1ZhbHVlKj4ob3BhcXVlUG9pbnRlcik7Ci0gICAgQ29waWVkQmxvY2sqIGJsb2NrOwot
Ci0gICAgLy8gSGFuZGxlICgxKSBhbmQgKDMpLgotICAgIGlmIChjb250YWlucyhwb2ludGVyLCBi
bG9jaykpCi0gICAgICAgIHBpbihibG9jayk7Ci0gICAgCi0gICAgLy8gSGFuZGxlICg0KS4gV2Ug
ZG9uJ3QgaGF2ZSB0byBleHBsaWNpdGx5IGNoZWNrIGFuZCBwaW4gdGhlIGJsb2NrIHVuZGVyIHRo
aXMKLSAgICAvLyBwb2ludGVyIGJlY2F1c2UgaXQgY2Fubm90IHBvc3NpYmx5IHBvaW50IHRvIHNv
bWV0aGluZyB0aGF0IGNhc2VzICgxKSBhbmQKLSAgICAvLyAoMykgYWJvdmUgb3IgY2FzZSAoMikg
YmVsb3cgd291bGRuJ3QgYWxyZWFkeSBjYXRjaC4KLSAgICBwb2ludGVyLS07Ci0gICAgCi0gICAg
Ly8gSGFuZGxlICgyKQotICAgIHBvaW50ZXItLTsKLSAgICBpZiAoY29udGFpbnMocG9pbnRlciwg
YmxvY2spKQotICAgICAgICBwaW4oYmxvY2spOwotfQotCi1pbmxpbmUgdm9pZCBDb3BpZWRTcGFj
ZTo6cmVjeWNsZUV2YWN1YXRlZEJsb2NrKENvcGllZEJsb2NrKiBibG9jaykKLXsKLSAgICBBU1NF
UlQoYmxvY2spOwotICAgIEFTU0VSVChibG9jay0+Y2FuQmVSZWN5Y2xlZCgpKTsKLSAgICBBU1NF
UlQoIWJsb2NrLT5tX2lzUGlubmVkKTsKLSAgICB7Ci0gICAgICAgIFNwaW5Mb2NrSG9sZGVyIGxv
Y2tlcigmbV90b1NwYWNlTG9jayk7Ci0gICAgICAgIG1fYmxvY2tTZXQucmVtb3ZlKGJsb2NrKTsK
LSAgICAgICAgbV9mcm9tU3BhY2UtPnJlbW92ZShibG9jayk7Ci0gICAgfQotICAgIG1faGVhcC0+
YmxvY2tBbGxvY2F0b3IoKS5kZWFsbG9jYXRlKENvcGllZEJsb2NrOjpkZXN0cm95KGJsb2NrKSk7
Ci19Ci0KLWlubGluZSB2b2lkIENvcGllZFNwYWNlOjpyZWN5Y2xlQm9ycm93ZWRCbG9jayhDb3Bp
ZWRCbG9jayogYmxvY2spCi17Ci0gICAgbV9oZWFwLT5ibG9ja0FsbG9jYXRvcigpLmRlYWxsb2Nh
dGUoQ29waWVkQmxvY2s6OmRlc3Ryb3koYmxvY2spKTsKLQotICAgIHsKLSAgICAgICAgTXV0ZXhM
b2NrZXIgbG9ja2VyKG1fbG9hbmVkQmxvY2tzTG9jayk7Ci0gICAgICAgIEFTU0VSVChtX251bWJl
ck9mTG9hbmVkQmxvY2tzID4gMCk7Ci0gICAgICAgIEFTU0VSVChtX2luQ29weWluZ1BoYXNlKTsK
LSAgICAgICAgbV9udW1iZXJPZkxvYW5lZEJsb2Nrcy0tOwotICAgICAgICBpZiAoIW1fbnVtYmVy
T2ZMb2FuZWRCbG9ja3MpCi0gICAgICAgICAgICBtX2xvYW5lZEJsb2Nrc0NvbmRpdGlvbi5zaWdu
YWwoKTsKLSAgICB9Ci19Ci0KLWlubGluZSBDb3BpZWRCbG9jayogQ29waWVkU3BhY2U6OmFsbG9j
YXRlQmxvY2tGb3JDb3B5aW5nUGhhc2UoKQotewotICAgIEFTU0VSVChtX2luQ29weWluZ1BoYXNl
KTsKLSAgICBDb3BpZWRCbG9jayogYmxvY2sgPSBDb3BpZWRCbG9jazo6Y3JlYXRlTm9aZXJvRmls
bChtX2hlYXAtPmJsb2NrQWxsb2NhdG9yKCkuYWxsb2NhdGU8Q29waWVkQmxvY2s+KCkpOwotCi0g
ICAgewotICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9sb2FuZWRCbG9ja3NMb2NrKTsKLSAg
ICAgICAgbV9udW1iZXJPZkxvYW5lZEJsb2NrcysrOwotICAgIH0KLQotICAgIEFTU0VSVCghYmxv
Y2stPmRhdGFTaXplKCkpOwotICAgIHJldHVybiBibG9jazsKLX0KLQotaW5saW5lIHZvaWQgQ29w
aWVkU3BhY2U6OmFsbG9jYXRlQmxvY2soKQotewotICAgIGlmIChtX2hlYXAtPnNob3VsZENvbGxl
Y3QoKSkKLSAgICAgICAgbV9oZWFwLT5jb2xsZWN0KEhlYXA6OkRvTm90U3dlZXApOwotCi0gICAg
bV9hbGxvY2F0b3IucmVzZXRDdXJyZW50QmxvY2soKTsKLSAgICAKLSAgICBDb3BpZWRCbG9jayog
YmxvY2sgPSBDb3BpZWRCbG9jazo6Y3JlYXRlKG1faGVhcC0+YmxvY2tBbGxvY2F0b3IoKS5hbGxv
Y2F0ZTxDb3BpZWRCbG9jaz4oKSk7Ci0gICAgICAgIAotICAgIG1fdG9TcGFjZS0+cHVzaChibG9j
ayk7Ci0gICAgbV9ibG9ja0ZpbHRlci5hZGQocmVpbnRlcnByZXRfY2FzdDxCaXRzPihibG9jaykp
OwotICAgIG1fYmxvY2tTZXQuYWRkKGJsb2NrKTsKLSAgICBtX2FsbG9jYXRvci5zZXRDdXJyZW50
QmxvY2soYmxvY2spOwotfQotCi1pbmxpbmUgQ2hlY2tlZEJvb2xlYW4gQ29waWVkU3BhY2U6OnRy
eUFsbG9jYXRlKHNpemVfdCBieXRlcywgdm9pZCoqIG91dFB0cikKLXsKLSAgICBBU1NFUlQoIW1f
aGVhcC0+Z2xvYmFsRGF0YSgpLT5pc0luaXRpYWxpemluZ09iamVjdCgpKTsKLQotICAgIGlmIChp
c092ZXJzaXplKGJ5dGVzKSB8fCAhbV9hbGxvY2F0b3IudHJ5QWxsb2NhdGUoYnl0ZXMsIG91dFB0
cikpCi0gICAgICAgIHJldHVybiB0cnlBbGxvY2F0ZVNsb3dDYXNlKGJ5dGVzLCBvdXRQdHIpOwot
ICAgIAotICAgIEFTU0VSVCgqb3V0UHRyKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotaW5saW5l
IGJvb2wgQ29waWVkU3BhY2U6OmlzT3ZlcnNpemUoc2l6ZV90IGJ5dGVzKQotewotICAgIHJldHVy
biBieXRlcyA+IHNfbWF4QWxsb2NhdGlvblNpemU7Ci19Ci0KLWlubGluZSBib29sIENvcGllZFNw
YWNlOjppc1Bpbm5lZCh2b2lkKiBwdHIpCi17Ci0gICAgcmV0dXJuIGJsb2NrRm9yKHB0ciktPm1f
aXNQaW5uZWQ7Ci19Ci0KLWlubGluZSBDb3BpZWRCbG9jayogQ29waWVkU3BhY2U6Om92ZXJzaXpl
QmxvY2tGb3Iodm9pZCogcHRyKQotewotICAgIHJldHVybiByZWludGVycHJldF9jYXN0PENvcGll
ZEJsb2NrKj4ocmVpbnRlcnByZXRfY2FzdDxzaXplX3Q+KHB0cikgJiBXVEY6OnBhZ2VNYXNrKCkp
OwotfQotCi1pbmxpbmUgQ29waWVkQmxvY2sqIENvcGllZFNwYWNlOjpibG9ja0Zvcih2b2lkKiBw
dHIpCi17Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Q29waWVkQmxvY2sqPihyZWludGVy
cHJldF9jYXN0PHNpemVfdD4ocHRyKSAmIHNfYmxvY2tNYXNrKTsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgSlNDCi0KLSNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVk
U3BhY2VJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
Q29waWVkU3BhY2VJbmxpbmVzLmgJKHJldmlzaW9uIDEzMzM4OSkJKGZyb20gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2VJbmxpbmVNZXRob2RzLmg6MTMzMzg5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2VJbmxpbmVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBDb3BpZWRTcGFjZUlubGluZU1ldGhvZHNfaAorI2RlZmluZSBD
b3BpZWRTcGFjZUlubGluZU1ldGhvZHNfaAorCisjaW5jbHVkZSAiQ29waWVkQmxvY2suaCIKKyNp
bmNsdWRlICJDb3BpZWRTcGFjZS5oIgorI2luY2x1ZGUgIkhlYXAuaCIKKyNpbmNsdWRlICJIZWFw
QmxvY2suaCIKKyNpbmNsdWRlICJKU0dsb2JhbERhdGEuaCIKKyNpbmNsdWRlIDx3dGYvQ2hlY2tl
ZEJvb2xlYW4uaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2lubGluZSBib29sIENvcGllZFNwYWNl
Ojpjb250YWlucyhDb3BpZWRCbG9jayogYmxvY2spCit7CisgICAgcmV0dXJuICFtX2Jsb2NrRmls
dGVyLnJ1bGVPdXQocmVpbnRlcnByZXRfY2FzdDxCaXRzPihibG9jaykpICYmIG1fYmxvY2tTZXQu
Y29udGFpbnMoYmxvY2spOworfQorCitpbmxpbmUgYm9vbCBDb3BpZWRTcGFjZTo6Y29udGFpbnMo
dm9pZCogcHRyLCBDb3BpZWRCbG9jayomIHJlc3VsdCkKK3sKKyAgICBDb3BpZWRCbG9jayogYmxv
Y2sgPSBibG9ja0ZvcihwdHIpOworICAgIGlmIChjb250YWlucyhibG9jaykpIHsKKyAgICAgICAg
cmVzdWx0ID0gYmxvY2s7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBibG9jayA9
IG92ZXJzaXplQmxvY2tGb3IocHRyKTsKKyAgICByZXN1bHQgPSBibG9jazsKKyAgICByZXR1cm4g
Y29udGFpbnMoYmxvY2spOworfQorCitpbmxpbmUgdm9pZCBDb3BpZWRTcGFjZTo6cGluKENvcGll
ZEJsb2NrKiBibG9jaykKK3sKKyAgICBibG9jay0+bV9pc1Bpbm5lZCA9IHRydWU7Cit9CisKK2lu
bGluZSB2b2lkIENvcGllZFNwYWNlOjpwaW5JZk5lY2Vzc2FyeSh2b2lkKiBvcGFxdWVQb2ludGVy
KQoreworICAgIC8vIFBvaW50ZXJzIGludG8gdGhlIGNvcGllZCBzcGFjZSBjb21lIGluIHRoZSBm
b2xsb3dpbmcgdmFyaWV0aWVzOgorICAgIC8vIDEpICBQb2ludGVycyB0byB0aGUgc3RhcnQgb2Yg
YSBzcGFuIG9mIG1lbW9yeS4gVGhpcyBpcyB0aGUgbW9zdAorICAgIC8vICAgICBuYXR1cmFsIHRo
b3VnaCBub3QgbmVjZXNzYXJpbHkgdGhlIG1vc3QgY29tbW9uLgorICAgIC8vIDIpICBQb2ludGVy
cyB0byBvbmUgdmFsdWUtc2l6ZWQgKDggYnl0ZSkgd29yZCBwYXN0IHRoZSBlbmQgb2YKKyAgICAv
LyAgICAgYSBzcGFuIG9mIG1lbW9yeS4gVGhpcyBjdXJyZW50bHkgb2NjdXJzIHdpdGggc2VtaS1i
dXR0ZXJmbGllcworICAgIC8vICAgICBhbmQgc2hvdWxkIGJlIGZpeGVkIHNvb24sIG9uY2UgdGhl
IG90aGVyIGhhbGYgb2YgdGhlCisgICAgLy8gICAgIGJ1dHRlcmZseSBsYW5kcy4KKyAgICAvLyAz
KSAgUG9pbnRlcnMgdG8gdGhlIGlubmFyZHMgYXJpc2luZyBmcm9tIGxvb3AgaW5kdWN0aW9uIHZh
cmlhYmxlCisgICAgLy8gICAgIG9wdGltaXphdGlvbnMgKGVpdGhlciBtYW51YWwgb25lcyBvciBh
dXRvbWF0aWMsIGJ5IHRoZQorICAgIC8vICAgICBjb21waWxlcikuCisgICAgLy8gNCkgIFBvaW50
ZXJzIHRvIHRoZSBlbmQgb2YgYSBzcGFuIG9mIG1lbW9yeSBpbiBhcmlzaW5nIGZyb20KKyAgICAv
LyAgICAgaW5kdWN0aW9uIHZhcmlhYmxlIG9wdGltaXphdGlvbnMgY29tYmluZWQgd2l0aCB0aGUK
KyAgICAvLyAgICAgR0MtdG8tY29tcGlsZXIgY29udHJhY3QgbGFpZCBvdXQgaW4gdGhlIEMgc3Bl
YzogYSBwb2ludGVyIHRvCisgICAgLy8gICAgIHRoZSBlbmQgb2YgYSBzcGFuIG9mIG1lbW9yeSBt
dXN0IGJlIGNvbnNpZGVyZWQgdG8gYmUgYQorICAgIC8vICAgICBwb2ludGVyIHRvIHRoYXQgbWVt
b3J5LgorICAgIAorICAgIEVuY29kZWRKU1ZhbHVlKiBwb2ludGVyID0gcmVpbnRlcnByZXRfY2Fz
dDxFbmNvZGVkSlNWYWx1ZSo+KG9wYXF1ZVBvaW50ZXIpOworICAgIENvcGllZEJsb2NrKiBibG9j
azsKKworICAgIC8vIEhhbmRsZSAoMSkgYW5kICgzKS4KKyAgICBpZiAoY29udGFpbnMocG9pbnRl
ciwgYmxvY2spKQorICAgICAgICBwaW4oYmxvY2spOworICAgIAorICAgIC8vIEhhbmRsZSAoNCku
IFdlIGRvbid0IGhhdmUgdG8gZXhwbGljaXRseSBjaGVjayBhbmQgcGluIHRoZSBibG9jayB1bmRl
ciB0aGlzCisgICAgLy8gcG9pbnRlciBiZWNhdXNlIGl0IGNhbm5vdCBwb3NzaWJseSBwb2ludCB0
byBzb21ldGhpbmcgdGhhdCBjYXNlcyAoMSkgYW5kCisgICAgLy8gKDMpIGFib3ZlIG9yIGNhc2Ug
KDIpIGJlbG93IHdvdWxkbid0IGFscmVhZHkgY2F0Y2guCisgICAgcG9pbnRlci0tOworICAgIAor
ICAgIC8vIEhhbmRsZSAoMikKKyAgICBwb2ludGVyLS07CisgICAgaWYgKGNvbnRhaW5zKHBvaW50
ZXIsIGJsb2NrKSkKKyAgICAgICAgcGluKGJsb2NrKTsKK30KKworaW5saW5lIHZvaWQgQ29waWVk
U3BhY2U6OnJlY3ljbGVFdmFjdWF0ZWRCbG9jayhDb3BpZWRCbG9jayogYmxvY2spCit7CisgICAg
QVNTRVJUKGJsb2NrKTsKKyAgICBBU1NFUlQoYmxvY2stPmNhbkJlUmVjeWNsZWQoKSk7CisgICAg
QVNTRVJUKCFibG9jay0+bV9pc1Bpbm5lZCk7CisgICAgeworICAgICAgICBTcGluTG9ja0hvbGRl
ciBsb2NrZXIoJm1fdG9TcGFjZUxvY2spOworICAgICAgICBtX2Jsb2NrU2V0LnJlbW92ZShibG9j
ayk7CisgICAgICAgIG1fZnJvbVNwYWNlLT5yZW1vdmUoYmxvY2spOworICAgIH0KKyAgICBtX2hl
YXAtPmJsb2NrQWxsb2NhdG9yKCkuZGVhbGxvY2F0ZShDb3BpZWRCbG9jazo6ZGVzdHJveShibG9j
aykpOworfQorCitpbmxpbmUgdm9pZCBDb3BpZWRTcGFjZTo6cmVjeWNsZUJvcnJvd2VkQmxvY2so
Q29waWVkQmxvY2sqIGJsb2NrKQoreworICAgIG1faGVhcC0+YmxvY2tBbGxvY2F0b3IoKS5kZWFs
bG9jYXRlKENvcGllZEJsb2NrOjpkZXN0cm95KGJsb2NrKSk7CisKKyAgICB7CisgICAgICAgIE11
dGV4TG9ja2VyIGxvY2tlcihtX2xvYW5lZEJsb2Nrc0xvY2spOworICAgICAgICBBU1NFUlQobV9u
dW1iZXJPZkxvYW5lZEJsb2NrcyA+IDApOworICAgICAgICBBU1NFUlQobV9pbkNvcHlpbmdQaGFz
ZSk7CisgICAgICAgIG1fbnVtYmVyT2ZMb2FuZWRCbG9ja3MtLTsKKyAgICAgICAgaWYgKCFtX251
bWJlck9mTG9hbmVkQmxvY2tzKQorICAgICAgICAgICAgbV9sb2FuZWRCbG9ja3NDb25kaXRpb24u
c2lnbmFsKCk7CisgICAgfQorfQorCitpbmxpbmUgQ29waWVkQmxvY2sqIENvcGllZFNwYWNlOjph
bGxvY2F0ZUJsb2NrRm9yQ29weWluZ1BoYXNlKCkKK3sKKyAgICBBU1NFUlQobV9pbkNvcHlpbmdQ
aGFzZSk7CisgICAgQ29waWVkQmxvY2sqIGJsb2NrID0gQ29waWVkQmxvY2s6OmNyZWF0ZU5vWmVy
b0ZpbGwobV9oZWFwLT5ibG9ja0FsbG9jYXRvcigpLmFsbG9jYXRlPENvcGllZEJsb2NrPigpKTsK
KworICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbG9hbmVkQmxvY2tzTG9jayk7
CisgICAgICAgIG1fbnVtYmVyT2ZMb2FuZWRCbG9ja3MrKzsKKyAgICB9CisKKyAgICBBU1NFUlQo
IWJsb2NrLT5kYXRhU2l6ZSgpKTsKKyAgICByZXR1cm4gYmxvY2s7Cit9CisKK2lubGluZSB2b2lk
IENvcGllZFNwYWNlOjphbGxvY2F0ZUJsb2NrKCkKK3sKKyAgICBpZiAobV9oZWFwLT5zaG91bGRD
b2xsZWN0KCkpCisgICAgICAgIG1faGVhcC0+Y29sbGVjdChIZWFwOjpEb05vdFN3ZWVwKTsKKwor
ICAgIG1fYWxsb2NhdG9yLnJlc2V0Q3VycmVudEJsb2NrKCk7CisgICAgCisgICAgQ29waWVkQmxv
Y2sqIGJsb2NrID0gQ29waWVkQmxvY2s6OmNyZWF0ZShtX2hlYXAtPmJsb2NrQWxsb2NhdG9yKCku
YWxsb2NhdGU8Q29waWVkQmxvY2s+KCkpOworICAgICAgICAKKyAgICBtX3RvU3BhY2UtPnB1c2go
YmxvY2spOworICAgIG1fYmxvY2tGaWx0ZXIuYWRkKHJlaW50ZXJwcmV0X2Nhc3Q8Qml0cz4oYmxv
Y2spKTsKKyAgICBtX2Jsb2NrU2V0LmFkZChibG9jayk7CisgICAgbV9hbGxvY2F0b3Iuc2V0Q3Vy
cmVudEJsb2NrKGJsb2NrKTsKK30KKworaW5saW5lIENoZWNrZWRCb29sZWFuIENvcGllZFNwYWNl
Ojp0cnlBbGxvY2F0ZShzaXplX3QgYnl0ZXMsIHZvaWQqKiBvdXRQdHIpCit7CisgICAgQVNTRVJU
KCFtX2hlYXAtPmdsb2JhbERhdGEoKS0+aXNJbml0aWFsaXppbmdPYmplY3QoKSk7CisKKyAgICBp
ZiAoaXNPdmVyc2l6ZShieXRlcykgfHwgIW1fYWxsb2NhdG9yLnRyeUFsbG9jYXRlKGJ5dGVzLCBv
dXRQdHIpKQorICAgICAgICByZXR1cm4gdHJ5QWxsb2NhdGVTbG93Q2FzZShieXRlcywgb3V0UHRy
KTsKKyAgICAKKyAgICBBU1NFUlQoKm91dFB0cik7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2lu
bGluZSBib29sIENvcGllZFNwYWNlOjppc092ZXJzaXplKHNpemVfdCBieXRlcykKK3sKKyAgICBy
ZXR1cm4gYnl0ZXMgPiBzX21heEFsbG9jYXRpb25TaXplOworfQorCitpbmxpbmUgYm9vbCBDb3Bp
ZWRTcGFjZTo6aXNQaW5uZWQodm9pZCogcHRyKQoreworICAgIHJldHVybiBibG9ja0ZvcihwdHIp
LT5tX2lzUGlubmVkOworfQorCitpbmxpbmUgQ29waWVkQmxvY2sqIENvcGllZFNwYWNlOjpvdmVy
c2l6ZUJsb2NrRm9yKHZvaWQqIHB0cikKK3sKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxD
b3BpZWRCbG9jayo+KHJlaW50ZXJwcmV0X2Nhc3Q8c2l6ZV90PihwdHIpICYgV1RGOjpwYWdlTWFz
aygpKTsKK30KKworaW5saW5lIENvcGllZEJsb2NrKiBDb3BpZWRTcGFjZTo6YmxvY2tGb3Iodm9p
ZCogcHRyKQoreworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PENvcGllZEJsb2NrKj4ocmVp
bnRlcnByZXRfY2FzdDxzaXplX3Q+KHB0cikgJiBzX2Jsb2NrTWFzayk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Nv
cGllZFNwYWNlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0NvcGllZFNwYWNlSW5saW5lcy5oCShyZXZpc2lvbiAxMzMzODkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
MjMsOCArMjMsOCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBDb3BpZWRTcGFj
ZUlubGluZU1ldGhvZHNfaAotI2RlZmluZSBDb3BpZWRTcGFjZUlubGluZU1ldGhvZHNfaAorI2lm
bmRlZiBDb3BpZWRTcGFjZUlubGluZXNfaAorI2RlZmluZSBDb3BpZWRTcGFjZUlubGluZXNfaAog
CiAjaW5jbHVkZSAiQ29waWVkQmxvY2suaCIKICNpbmNsdWRlICJDb3BpZWRTcGFjZS5oIgpAQCAt
MTgyLDQgKzE4Miw1IEBAIGlubGluZSBDb3BpZWRCbG9jayogQ29waWVkU3BhY2U6OmJsb2NrRm8K
IAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKLSNlbmRpZgorI2VuZGlmIC8vIENvcGllZFNwYWNlSW5s
aW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlWaXNpdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5VmlzaXRvci5j
cHAJKHJldmlzaW9uIDEzMzk3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlW
aXNpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIkNvcHlWaXNpdG9yLmgiCiAKLSNpbmNsdWRlICJDb3B5VmlzaXRv
cklubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJDb3B5VmlzaXRvcklubGluZXMuaCIKICNpbmNs
dWRlICJHQ1RocmVhZFNoYXJlZERhdGEuaCIKICNpbmNsdWRlICJKU0NlbGwuaCIKICNpbmNsdWRl
ICJKU09iamVjdC5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVZpc2l0
b3JJbmxpbmVNZXRob2RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQ29weVZpc2l0b3JJbmxpbmVNZXRob2RzLmgJKHJldmlzaW9uIDEzMzk3MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlWaXNpdG9ySW5saW5lTWV0aG9kcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDExOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBDb3B5VmlzaXRv
cklubGluZU1ldGhvZHNfaAotI2RlZmluZSBDb3B5VmlzaXRvcklubGluZU1ldGhvZHNfaAotCi0j
aW5jbHVkZSAiQ2xhc3NJbmZvLmgiCi0jaW5jbHVkZSAiQ29weVZpc2l0b3IuaCIKLSNpbmNsdWRl
ICJHQ1RocmVhZFNoYXJlZERhdGEuaCIKLSNpbmNsdWRlICJKU0NlbGwuaCIKLSNpbmNsdWRlICJK
U0Rlc3RydWN0aWJsZU9iamVjdC5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgR0NDb3B5
UGhhc2VGdW5jdG9yIDogcHVibGljIE1hcmtlZEJsb2NrOjpWb2lkRnVuY3RvciB7Ci1wdWJsaWM6
Ci0gICAgR0NDb3B5UGhhc2VGdW5jdG9yKENvcHlWaXNpdG9yJiB2aXNpdG9yKQotICAgICAgICA6
IG1fdmlzaXRvcih2aXNpdG9yKQotICAgIHsKLSAgICB9Ci0KLSAgICB2b2lkIG9wZXJhdG9yKCko
SlNDZWxsKiBjZWxsKQotICAgIHsKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjZWxs
LT5zdHJ1Y3R1cmUoKTsKLSAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5
KCkgJiYgIWhhc0luZGV4ZWRQcm9wZXJ0aWVzKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKQot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBBU1NFUlQoc3RydWN0dXJlLT5jbGFzc0luZm8o
KS0+bWV0aG9kVGFibGUuY29weUJhY2tpbmdTdG9yZSA9PSBKU09iamVjdDo6Y29weUJhY2tpbmdT
dG9yZSk7Ci0gICAgICAgIEpTT2JqZWN0Ojpjb3B5QmFja2luZ1N0b3JlKGNlbGwsIG1fdmlzaXRv
cik7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIENvcHlWaXNpdG9yJiBtX3Zpc2l0b3I7Ci19Owot
Ci1pbmxpbmUgYm9vbCBDb3B5VmlzaXRvcjo6Y2hlY2tJZlNob3VsZENvcHkodm9pZCogb2xkUHRy
LCBzaXplX3QgYnl0ZXMpCi17Ci0gICAgaWYgKENvcGllZFNwYWNlOjppc092ZXJzaXplKGJ5dGVz
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKENvcGllZFNwYWNlOjpibG9ja0Zv
cihvbGRQdHIpLT5pc1Bpbm5lZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotaW5saW5lIHZvaWQqIENvcHlWaXNpdG9yOjphbGxvY2F0ZU5ld1NwYWNl
KHNpemVfdCBieXRlcykKLXsKLSAgICB2b2lkKiByZXN1bHQgPSAwOyAvLyBDb21waWxlcnMgZG9u
J3QgcmVhbGl6ZSB0aGF0IHRoaXMgd2lsbCBiZSBhc3NpZ25lZC4KLSAgICBpZiAoTElLRUxZKG1f
Y29waWVkQWxsb2NhdG9yLnRyeUFsbG9jYXRlKGJ5dGVzLCAmcmVzdWx0KSkpCi0gICAgICAgIHJl
dHVybiByZXN1bHQ7Ci0gICAgCi0gICAgcmVzdWx0ID0gYWxsb2NhdGVOZXdTcGFjZVNsb3coYnl0
ZXMpOwotICAgIEFTU0VSVChyZXN1bHQpOwotICAgIHJldHVybiByZXN1bHQ7Ci19ICAgICAgIAot
Ci1pbmxpbmUgdm9pZCogQ29weVZpc2l0b3I6OmFsbG9jYXRlTmV3U3BhY2VTbG93KHNpemVfdCBi
eXRlcykKLXsKLSAgICBDb3BpZWRCbG9jayogbmV3QmxvY2sgPSAwOwotICAgIG1fc2hhcmVkLm1f
Y29waWVkU3BhY2UtPmRvbmVGaWxsaW5nQmxvY2sobV9jb3BpZWRBbGxvY2F0b3IucmVzZXRDdXJy
ZW50QmxvY2soKSwgJm5ld0Jsb2NrKTsKLSAgICBtX2NvcGllZEFsbG9jYXRvci5zZXRDdXJyZW50
QmxvY2sobmV3QmxvY2spOwotCi0gICAgdm9pZCogcmVzdWx0ID0gMDsKLSAgICBDaGVja2VkQm9v
bGVhbiBkaWRTdWNjZWVkID0gbV9jb3BpZWRBbGxvY2F0b3IudHJ5QWxsb2NhdGUoYnl0ZXMsICZy
ZXN1bHQpOwotICAgIEFTU0VSVChkaWRTdWNjZWVkKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQot
Ci1pbmxpbmUgdm9pZCBDb3B5VmlzaXRvcjo6c3RhcnRDb3B5aW5nKCkKLXsKLSAgICBBU1NFUlQo
IW1fY29waWVkQWxsb2NhdG9yLmlzVmFsaWQoKSk7Ci0gICAgQ29waWVkQmxvY2sqIGJsb2NrID0g
MDsKLSAgICBtX3NoYXJlZC5tX2NvcGllZFNwYWNlLT5kb25lRmlsbGluZ0Jsb2NrKG1fY29waWVk
QWxsb2NhdG9yLnJlc2V0Q3VycmVudEJsb2NrKCksICZibG9jayk7Ci0gICAgbV9jb3BpZWRBbGxv
Y2F0b3Iuc2V0Q3VycmVudEJsb2NrKGJsb2NrKTsKLX0KLQotaW5saW5lIHZvaWQgQ29weVZpc2l0
b3I6OmRvbmVDb3B5aW5nKCkKLXsKLSAgICBpZiAoIW1fY29waWVkQWxsb2NhdG9yLmlzVmFsaWQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zaGFyZWQubV9jb3BpZWRTcGFjZS0+ZG9uZUZp
bGxpbmdCbG9jayhtX2NvcGllZEFsbG9jYXRvci5yZXNldEN1cnJlbnRCbG9jaygpLCAwKTsKLX0K
LQotaW5saW5lIHZvaWQgQ29weVZpc2l0b3I6OmRpZENvcHkodm9pZCogcHRyLCBzaXplX3QgYnl0
ZXMpCi17Ci0gICAgQVNTRVJUKCFDb3BpZWRTcGFjZTo6aXNPdmVyc2l6ZShieXRlcykpOwotICAg
IENvcGllZEJsb2NrKiBibG9jayA9IENvcGllZFNwYWNlOjpibG9ja0ZvcihwdHIpOwotICAgIEFT
U0VSVCghYmxvY2stPmlzUGlubmVkKCkpOwotCi0gICAgaWYgKGJsb2NrLT5kaWRFdmFjdWF0ZUJ5
dGVzKGJ5dGVzKSkKLSAgICAgICAgbV9zaGFyZWQubV9jb3BpZWRTcGFjZS0+cmVjeWNsZUV2YWN1
YXRlZEJsb2NrKGJsb2NrKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVZpc2l0b3JJbmxpbmVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVZpc2l0b3JJbmxpbmVzLmgJ
KHJldmlzaW9uIDEzMzM4OSkJKGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVZp
c2l0b3JJbmxpbmVNZXRob2RzLmg6MTMzMzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQ29weVZpc2l0b3JJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTkgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIENvcHlWaXNpdG9ySW5saW5lTWV0aG9kc19oCisjZGVmaW5l
IENvcHlWaXNpdG9ySW5saW5lTWV0aG9kc19oCisKKyNpbmNsdWRlICJDbGFzc0luZm8uaCIKKyNp
bmNsdWRlICJDb3B5VmlzaXRvci5oIgorI2luY2x1ZGUgIkdDVGhyZWFkU2hhcmVkRGF0YS5oIgor
I2luY2x1ZGUgIkpTQ2VsbC5oIgorI2luY2x1ZGUgIkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LmgiCisK
K25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBHQ0NvcHlQaGFzZUZ1bmN0b3IgOiBwdWJsaWMgTWFy
a2VkQmxvY2s6OlZvaWRGdW5jdG9yIHsKK3B1YmxpYzoKKyAgICBHQ0NvcHlQaGFzZUZ1bmN0b3Io
Q29weVZpc2l0b3ImIHZpc2l0b3IpCisgICAgICAgIDogbV92aXNpdG9yKHZpc2l0b3IpCisgICAg
eworICAgIH0KKworICAgIHZvaWQgb3BlcmF0b3IoKShKU0NlbGwqIGNlbGwpCisgICAgeworICAg
ICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNlbGwtPnN0cnVjdHVyZSgpOworICAgICAgICBp
ZiAoIXN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAmJiAhaGFzSW5kZXhlZFByb3BlcnRp
ZXMoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIEFTU0VSVChzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLT5tZXRob2RUYWJsZS5jb3B5QmFja2lu
Z1N0b3JlID09IEpTT2JqZWN0Ojpjb3B5QmFja2luZ1N0b3JlKTsKKyAgICAgICAgSlNPYmplY3Q6
OmNvcHlCYWNraW5nU3RvcmUoY2VsbCwgbV92aXNpdG9yKTsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgQ29weVZpc2l0b3ImIG1fdmlzaXRvcjsKK307CisKK2lubGluZSBib29sIENvcHlWaXNpdG9y
OjpjaGVja0lmU2hvdWxkQ29weSh2b2lkKiBvbGRQdHIsIHNpemVfdCBieXRlcykKK3sKKyAgICBp
ZiAoQ29waWVkU3BhY2U6OmlzT3ZlcnNpemUoYnl0ZXMpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBpZiAoQ29waWVkU3BhY2U6OmJsb2NrRm9yKG9sZFB0ciktPmlzUGlubmVkKCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQorCitpbmxpbmUgdm9p
ZCogQ29weVZpc2l0b3I6OmFsbG9jYXRlTmV3U3BhY2Uoc2l6ZV90IGJ5dGVzKQoreworICAgIHZv
aWQqIHJlc3VsdCA9IDA7IC8vIENvbXBpbGVycyBkb24ndCByZWFsaXplIHRoYXQgdGhpcyB3aWxs
IGJlIGFzc2lnbmVkLgorICAgIGlmIChMSUtFTFkobV9jb3BpZWRBbGxvY2F0b3IudHJ5QWxsb2Nh
dGUoYnl0ZXMsICZyZXN1bHQpKSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAKKyAgICBy
ZXN1bHQgPSBhbGxvY2F0ZU5ld1NwYWNlU2xvdyhieXRlcyk7CisgICAgQVNTRVJUKHJlc3VsdCk7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30gICAgICAgCisKK2lubGluZSB2b2lkKiBDb3B5VmlzaXRv
cjo6YWxsb2NhdGVOZXdTcGFjZVNsb3coc2l6ZV90IGJ5dGVzKQoreworICAgIENvcGllZEJsb2Nr
KiBuZXdCbG9jayA9IDA7CisgICAgbV9zaGFyZWQubV9jb3BpZWRTcGFjZS0+ZG9uZUZpbGxpbmdC
bG9jayhtX2NvcGllZEFsbG9jYXRvci5yZXNldEN1cnJlbnRCbG9jaygpLCAmbmV3QmxvY2spOwor
ICAgIG1fY29waWVkQWxsb2NhdG9yLnNldEN1cnJlbnRCbG9jayhuZXdCbG9jayk7CisKKyAgICB2
b2lkKiByZXN1bHQgPSAwOworICAgIENoZWNrZWRCb29sZWFuIGRpZFN1Y2NlZWQgPSBtX2NvcGll
ZEFsbG9jYXRvci50cnlBbGxvY2F0ZShieXRlcywgJnJlc3VsdCk7CisgICAgQVNTRVJUKGRpZFN1
Y2NlZWQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2lubGluZSB2b2lkIENvcHlWaXNpdG9y
OjpzdGFydENvcHlpbmcoKQoreworICAgIEFTU0VSVCghbV9jb3BpZWRBbGxvY2F0b3IuaXNWYWxp
ZCgpKTsKKyAgICBDb3BpZWRCbG9jayogYmxvY2sgPSAwOworICAgIG1fc2hhcmVkLm1fY29waWVk
U3BhY2UtPmRvbmVGaWxsaW5nQmxvY2sobV9jb3BpZWRBbGxvY2F0b3IucmVzZXRDdXJyZW50Qmxv
Y2soKSwgJmJsb2NrKTsKKyAgICBtX2NvcGllZEFsbG9jYXRvci5zZXRDdXJyZW50QmxvY2soYmxv
Y2spOworfQorCitpbmxpbmUgdm9pZCBDb3B5VmlzaXRvcjo6ZG9uZUNvcHlpbmcoKQoreworICAg
IGlmICghbV9jb3BpZWRBbGxvY2F0b3IuaXNWYWxpZCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBtX3NoYXJlZC5tX2NvcGllZFNwYWNlLT5kb25lRmlsbGluZ0Jsb2NrKG1fY29waWVkQWxsb2Nh
dG9yLnJlc2V0Q3VycmVudEJsb2NrKCksIDApOworfQorCitpbmxpbmUgdm9pZCBDb3B5VmlzaXRv
cjo6ZGlkQ29weSh2b2lkKiBwdHIsIHNpemVfdCBieXRlcykKK3sKKyAgICBBU1NFUlQoIUNvcGll
ZFNwYWNlOjppc092ZXJzaXplKGJ5dGVzKSk7CisgICAgQ29waWVkQmxvY2sqIGJsb2NrID0gQ29w
aWVkU3BhY2U6OmJsb2NrRm9yKHB0cik7CisgICAgQVNTRVJUKCFibG9jay0+aXNQaW5uZWQoKSk7
CisKKyAgICBpZiAoYmxvY2stPmRpZEV2YWN1YXRlQnl0ZXMoYnl0ZXMpKQorICAgICAgICBtX3No
YXJlZC5tX2NvcGllZFNwYWNlLT5yZWN5Y2xlRXZhY3VhdGVkQmxvY2soYmxvY2spOworfQorCit9
IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9Db3B5VmlzaXRvcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9Db3B5VmlzaXRvcklubGluZXMuaAkocmV2aXNpb24gMTMzMzg5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVZpc2l0b3JJbmxpbmVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTIzLDggKzIzLDggQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
ICAqLwogCi0jaWZuZGVmIENvcHlWaXNpdG9ySW5saW5lTWV0aG9kc19oCi0jZGVmaW5lIENvcHlW
aXNpdG9ySW5saW5lTWV0aG9kc19oCisjaWZuZGVmIENvcHlWaXNpdG9ySW5saW5lc19oCisjZGVm
aW5lIENvcHlWaXNpdG9ySW5saW5lc19oCiAKICNpbmNsdWRlICJDbGFzc0luZm8uaCIKICNpbmNs
dWRlICJDb3B5VmlzaXRvci5oIgpAQCAtMTE2LDQgKzExNiw1IEBAIGlubGluZSB2b2lkIENvcHlW
aXNpdG9yOjpkaWRDb3B5KHZvaWQqIHAKIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKLSNlbmRpZgor
I2VuZGlmIC8vIENvcHlWaXNpdG9ySW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0dDVGhyZWFkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9HQ1RocmVhZC5jcHAJKHJldmlzaW9uIDEzMzk3MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0dDVGhyZWFkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBA
QAogI2luY2x1ZGUgIkdDVGhyZWFkLmgiCiAKICNpbmNsdWRlICJDb3B5VmlzaXRvci5oIgotI2lu
Y2x1ZGUgIkNvcHlWaXNpdG9ySW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkNvcHlWaXNpdG9y
SW5saW5lcy5oIgogI2luY2x1ZGUgIkdDVGhyZWFkU2hhcmVkRGF0YS5oIgogI2luY2x1ZGUgIlNs
b3RWaXNpdG9yLmgiCiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0dDVGhyZWFkU2hhcmVkRGF0YS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NUaHJlYWRTaGFyZWREYXRhLmNwcAkocmV2aXNp
b24gMTMzOTczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NUaHJlYWRTaGFyZWRE
YXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsMTIgKzI3LDEyIEBACiAjaW5jbHVkZSAiR0NU
aHJlYWRTaGFyZWREYXRhLmgiCiAKICNpbmNsdWRlICJDb3B5VmlzaXRvci5oIgotI2luY2x1ZGUg
IkNvcHlWaXNpdG9ySW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkNvcHlWaXNpdG9ySW5saW5l
cy5oIgogI2luY2x1ZGUgIkdDVGhyZWFkLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgiCiAj
aW5jbHVkZSAiTWFya1N0YWNrLmgiCiAjaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKLSNpbmNsdWRl
ICJTbG90VmlzaXRvcklubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJTbG90VmlzaXRvcklubGlu
ZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hhbmRsZVN0YWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9IYW5kbGVTdGFjay5jcHAJKHJldmlzaW9uIDEzMzk3MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hhbmRsZVN0YWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsOCArMjcs
OCBAQAogI2luY2x1ZGUgIkhhbmRsZVN0YWNrLmgiCiAKICNpbmNsdWRlICJIZWFwUm9vdFZpc2l0
b3IuaCIKLSNpbmNsdWRlICJKU1ZhbHVlSW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUgIkpTT2Jq
ZWN0LmgiCisjaW5jbHVkZSAiSlNWYWx1ZUlubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lvbiAxMzM5NzMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjQsOCArMjQsOCBAQAogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkNvbnNlcnZh
dGl2ZVJvb3RzLmgiCiAjaW5jbHVkZSAiQ29waWVkU3BhY2UuaCIKLSNpbmNsdWRlICJDb3BpZWRT
cGFjZUlubGluZU1ldGhvZHMuaCIKLSNpbmNsdWRlICJDb3B5VmlzaXRvcklubGluZU1ldGhvZHMu
aCIKKyNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZXMuaCIKKyNpbmNsdWRlICJDb3B5VmlzaXRv
cklubGluZXMuaCIKICNpbmNsdWRlICJHQ0FjdGl2aXR5Q2FsbGJhY2suaCIKICNpbmNsdWRlICJI
ZWFwUm9vdFZpc2l0b3IuaCIKICNpbmNsdWRlICJIZWFwU3RhdGlzdGljcy5oIgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFJvb3RWaXNpdG9yLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFJvb3RWaXNpdG9yLmgJKHJldmlzaW9uIDEz
Mzk3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBSb290VmlzaXRvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAjZGVmaW5lIEhlYXBSb290VmlzaXRvcl9o
CiAKICNpbmNsdWRlICJTbG90VmlzaXRvci5oIgotI2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5l
TWV0aG9kcy5oIgorI2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5lcy5oIgogCiBuYW1lc3BhY2Ug
SlNDIHsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2suY3BwCShy
ZXZpc2lvbiAxMzM5NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2su
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxOCArMjUsMTggQEAKIAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIk1hcmtTdGFjay5oIgotI2luY2x1ZGUgIk1hcmtTdGFja0lubGluZU1l
dGhvZHMuaCIKKyNpbmNsdWRlICJNYXJrU3RhY2tJbmxpbmVzLmgiCiAKLSNpbmNsdWRlICJDb3Bp
ZWRTcGFjZS5oIgotI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oIgogI2luY2x1
ZGUgIkNvbnNlcnZhdGl2ZVJvb3RzLmgiCisjaW5jbHVkZSAiQ29waWVkU3BhY2UuaCIKKyNpbmNs
dWRlICJDb3BpZWRTcGFjZUlubGluZXMuaCIKICNpbmNsdWRlICJIZWFwLmgiCiAjaW5jbHVkZSAi
T3B0aW9ucy5oIgogI2luY2x1ZGUgIkpTQXJyYXkuaCIKICNpbmNsdWRlICJKU0NlbGwuaCIKICNp
bmNsdWRlICJKU09iamVjdC5oIgogCi0jaW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVNZXRob2Rz
LmgiCisjaW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJl
LmgiCiAjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCiAjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFja0lubGluZU1ldGhvZHMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2tJbmxp
bmVNZXRob2RzLmgJKHJldmlzaW9uIDEzMzk3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtTdGFja0lubGluZU1ldGhvZHMuaAkod29ya2luZyBjb3B5KQpAQCAtMSwxMTMgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwot
Ci0jaWZuZGVmIE1hcmtTdGFja0lubGluZU1ldGhvZHNfaAotI2RlZmluZSBNYXJrU3RhY2tJbmxp
bmVNZXRob2RzX2gKLQotI2luY2x1ZGUgIkdDVGhyZWFkU2hhcmVkRGF0YS5oIgotI2luY2x1ZGUg
Ik1hcmtTdGFjay5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotaW5saW5lIHNpemVfdCBNYXJrU3Rh
Y2tBcnJheTo6cG9zdEluY1RvcCgpCi17Ci0gICAgc2l6ZV90IHJlc3VsdCA9IG1fdG9wKys7Ci0g
ICAgQVNTRVJUKHJlc3VsdCA9PSBtX3RvcFNlZ21lbnQtPm1fdG9wKyspOwotICAgIHJldHVybiBy
ZXN1bHQ7Ci19Ci0gICAgICAgIAotaW5saW5lIHNpemVfdCBNYXJrU3RhY2tBcnJheTo6cHJlRGVj
VG9wKCkKLXsKLSAgICBzaXplX3QgcmVzdWx0ID0gLS1tX3RvcDsKLSAgICBBU1NFUlQocmVzdWx0
ID09IC0tbV90b3BTZWdtZW50LT5tX3RvcCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLSAgICAg
ICAgCi1pbmxpbmUgdm9pZCBNYXJrU3RhY2tBcnJheTo6c2V0VG9wRm9yRnVsbFNlZ21lbnQoKQot
ewotICAgIEFTU0VSVChtX3RvcFNlZ21lbnQtPm1fdG9wID09IG1fc2VnbWVudENhcGFjaXR5KTsK
LSAgICBtX3RvcCA9IG1fc2VnbWVudENhcGFjaXR5OwotfQotCi1pbmxpbmUgdm9pZCBNYXJrU3Rh
Y2tBcnJheTo6c2V0VG9wRm9yRW1wdHlTZWdtZW50KCkKLXsKLSAgICBBU1NFUlQoIW1fdG9wU2Vn
bWVudC0+bV90b3ApOwotICAgIG1fdG9wID0gMDsKLX0KLQotaW5saW5lIHNpemVfdCBNYXJrU3Rh
Y2tBcnJheTo6dG9wKCkKLXsKLSAgICBBU1NFUlQobV90b3AgPT0gbV90b3BTZWdtZW50LT5tX3Rv
cCk7Ci0gICAgcmV0dXJuIG1fdG9wOwotfQotCi0jaWYgQVNTRVJUX0RJU0FCTEVECi1pbmxpbmUg
dm9pZCBNYXJrU3RhY2tBcnJheTo6dmFsaWRhdGVQcmV2aW91cygpIHsgfQotI2Vsc2UKLWlubGlu
ZSB2b2lkIE1hcmtTdGFja0FycmF5Ojp2YWxpZGF0ZVByZXZpb3VzKCkKLXsKLSAgICB1bnNpZ25l
ZCBjb3VudCA9IDA7Ci0gICAgZm9yIChNYXJrU3RhY2tTZWdtZW50KiBjdXJyZW50ID0gbV90b3BT
ZWdtZW50LT5tX3ByZXZpb3VzOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+bV9wcmV2aW91
cykKLSAgICAgICAgY291bnQrKzsKLSAgICBBU1NFUlQoY291bnQgPT0gbV9udW1iZXJPZlByZXZp
b3VzU2VnbWVudHMpOwotfQotI2VuZGlmCi0KLWlubGluZSB2b2lkIE1hcmtTdGFja0FycmF5Ojph
cHBlbmQoY29uc3QgSlNDZWxsKiBjZWxsKQotewotICAgIGlmIChtX3RvcCA9PSBtX3NlZ21lbnRD
YXBhY2l0eSkKLSAgICAgICAgZXhwYW5kKCk7Ci0gICAgbV90b3BTZWdtZW50LT5kYXRhKClbcG9z
dEluY1RvcCgpXSA9IGNlbGw7Ci19Ci0KLWlubGluZSBib29sIE1hcmtTdGFja0FycmF5OjpjYW5S
ZW1vdmVMYXN0KCkKLXsKLSAgICByZXR1cm4gISFtX3RvcDsKLX0KLQotaW5saW5lIGNvbnN0IEpT
Q2VsbCogTWFya1N0YWNrQXJyYXk6OnJlbW92ZUxhc3QoKQotewotICAgIHJldHVybiBtX3RvcFNl
Z21lbnQtPmRhdGEoKVtwcmVEZWNUb3AoKV07Ci19Ci0KLWlubGluZSBib29sIE1hcmtTdGFja0Fy
cmF5Ojppc0VtcHR5KCkKLXsKLSAgICBpZiAobV90b3ApCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBpZiAobV90b3BTZWdtZW50LT5tX3ByZXZpb3VzKSB7Ci0gICAgICAgIEFTU0VSVChtX3Rv
cFNlZ21lbnQtPm1fcHJldmlvdXMtPm1fdG9wID09IG1fc2VnbWVudENhcGFjaXR5KTsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotaW5saW5lIHNp
emVfdCBNYXJrU3RhY2tBcnJheTo6c2l6ZSgpCi17Ci0gICAgcmV0dXJuIG1fdG9wICsgbV9zZWdt
ZW50Q2FwYWNpdHkgKiBtX251bWJlck9mUHJldmlvdXNTZWdtZW50czsKLX0KLQotfSAvLyBuYW1l
c3BhY2UgSlNDCi0KLSNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a1N0YWNrSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtTdGFja0lubGluZXMuaAkocmV2aXNpb24gMTMzMzg5KQkoZnJvbSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJrU3RhY2tJbmxpbmVNZXRob2RzLmg6MTMzMzg5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTEzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDExIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgTWFya1N0YWNrSW5saW5lTWV0aG9kc19oCisjZGVmaW5lIE1h
cmtTdGFja0lubGluZU1ldGhvZHNfaAorCisjaW5jbHVkZSAiR0NUaHJlYWRTaGFyZWREYXRhLmgi
CisjaW5jbHVkZSAiTWFya1N0YWNrLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitpbmxpbmUgc2l6
ZV90IE1hcmtTdGFja0FycmF5Ojpwb3N0SW5jVG9wKCkKK3sKKyAgICBzaXplX3QgcmVzdWx0ID0g
bV90b3ArKzsKKyAgICBBU1NFUlQocmVzdWx0ID09IG1fdG9wU2VnbWVudC0+bV90b3ArKyk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKyAgICAgICAgCitpbmxpbmUgc2l6ZV90IE1hcmtTdGFja0Fy
cmF5OjpwcmVEZWNUb3AoKQoreworICAgIHNpemVfdCByZXN1bHQgPSAtLW1fdG9wOworICAgIEFT
U0VSVChyZXN1bHQgPT0gLS1tX3RvcFNlZ21lbnQtPm1fdG9wKTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorICAgICAgICAKK2lubGluZSB2b2lkIE1hcmtTdGFja0FycmF5OjpzZXRUb3BGb3JGdWxs
U2VnbWVudCgpCit7CisgICAgQVNTRVJUKG1fdG9wU2VnbWVudC0+bV90b3AgPT0gbV9zZWdtZW50
Q2FwYWNpdHkpOworICAgIG1fdG9wID0gbV9zZWdtZW50Q2FwYWNpdHk7Cit9CisKK2lubGluZSB2
b2lkIE1hcmtTdGFja0FycmF5OjpzZXRUb3BGb3JFbXB0eVNlZ21lbnQoKQoreworICAgIEFTU0VS
VCghbV90b3BTZWdtZW50LT5tX3RvcCk7CisgICAgbV90b3AgPSAwOworfQorCitpbmxpbmUgc2l6
ZV90IE1hcmtTdGFja0FycmF5Ojp0b3AoKQoreworICAgIEFTU0VSVChtX3RvcCA9PSBtX3RvcFNl
Z21lbnQtPm1fdG9wKTsKKyAgICByZXR1cm4gbV90b3A7Cit9CisKKyNpZiBBU1NFUlRfRElTQUJM
RUQKK2lubGluZSB2b2lkIE1hcmtTdGFja0FycmF5Ojp2YWxpZGF0ZVByZXZpb3VzKCkgeyB9Cisj
ZWxzZQoraW5saW5lIHZvaWQgTWFya1N0YWNrQXJyYXk6OnZhbGlkYXRlUHJldmlvdXMoKQorewor
ICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKKyAgICBmb3IgKE1hcmtTdGFja1NlZ21lbnQqIGN1cnJl
bnQgPSBtX3RvcFNlZ21lbnQtPm1fcHJldmlvdXM7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50
LT5tX3ByZXZpb3VzKQorICAgICAgICBjb3VudCsrOworICAgIEFTU0VSVChjb3VudCA9PSBtX251
bWJlck9mUHJldmlvdXNTZWdtZW50cyk7Cit9CisjZW5kaWYKKworaW5saW5lIHZvaWQgTWFya1N0
YWNrQXJyYXk6OmFwcGVuZChjb25zdCBKU0NlbGwqIGNlbGwpCit7CisgICAgaWYgKG1fdG9wID09
IG1fc2VnbWVudENhcGFjaXR5KQorICAgICAgICBleHBhbmQoKTsKKyAgICBtX3RvcFNlZ21lbnQt
PmRhdGEoKVtwb3N0SW5jVG9wKCldID0gY2VsbDsKK30KKworaW5saW5lIGJvb2wgTWFya1N0YWNr
QXJyYXk6OmNhblJlbW92ZUxhc3QoKQoreworICAgIHJldHVybiAhIW1fdG9wOworfQorCitpbmxp
bmUgY29uc3QgSlNDZWxsKiBNYXJrU3RhY2tBcnJheTo6cmVtb3ZlTGFzdCgpCit7CisgICAgcmV0
dXJuIG1fdG9wU2VnbWVudC0+ZGF0YSgpW3ByZURlY1RvcCgpXTsKK30KKworaW5saW5lIGJvb2wg
TWFya1N0YWNrQXJyYXk6OmlzRW1wdHkoKQoreworICAgIGlmIChtX3RvcCkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGlmIChtX3RvcFNlZ21lbnQtPm1fcHJldmlvdXMpIHsKKyAgICAgICAg
QVNTRVJUKG1fdG9wU2VnbWVudC0+bV9wcmV2aW91cy0+bV90b3AgPT0gbV9zZWdtZW50Q2FwYWNp
dHkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQor
CitpbmxpbmUgc2l6ZV90IE1hcmtTdGFja0FycmF5OjpzaXplKCkKK3sKKyAgICByZXR1cm4gbV90
b3AgKyBtX3NlZ21lbnRDYXBhY2l0eSAqIG1fbnVtYmVyT2ZQcmV2aW91c1NlZ21lbnRzOworfQor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJrU3RhY2tJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya1N0YWNrSW5saW5lcy5oCShyZXZpc2lvbiAxMzMzODkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTIzLDggKzIzLDggQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYgTWFya1N0
YWNrSW5saW5lTWV0aG9kc19oCi0jZGVmaW5lIE1hcmtTdGFja0lubGluZU1ldGhvZHNfaAorI2lm
bmRlZiBNYXJrU3RhY2tJbmxpbmVzX2gKKyNkZWZpbmUgTWFya1N0YWNrSW5saW5lc19oCiAKICNp
bmNsdWRlICJHQ1RocmVhZFNoYXJlZERhdGEuaCIKICNpbmNsdWRlICJNYXJrU3RhY2suaCIKQEAg
LTM3LDE0ICszNywxNCBAQCBpbmxpbmUgc2l6ZV90IE1hcmtTdGFja0FycmF5Ojpwb3N0SW5jVG9w
CiAgICAgQVNTRVJUKHJlc3VsdCA9PSBtX3RvcFNlZ21lbnQtPm1fdG9wKyspOwogICAgIHJldHVy
biByZXN1bHQ7CiB9Ci0gICAgICAgIAorCiBpbmxpbmUgc2l6ZV90IE1hcmtTdGFja0FycmF5Ojpw
cmVEZWNUb3AoKQogewogICAgIHNpemVfdCByZXN1bHQgPSAtLW1fdG9wOwogICAgIEFTU0VSVChy
ZXN1bHQgPT0gLS1tX3RvcFNlZ21lbnQtPm1fdG9wKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQot
ICAgICAgICAKKwogaW5saW5lIHZvaWQgTWFya1N0YWNrQXJyYXk6OnNldFRvcEZvckZ1bGxTZWdt
ZW50KCkKIHsKICAgICBBU1NFUlQobV90b3BTZWdtZW50LT5tX3RvcCA9PSBtX3NlZ21lbnRDYXBh
Y2l0eSk7CkBAIC0xMTAsNCArMTEwLDUgQEAgaW5saW5lIHNpemVfdCBNYXJrU3RhY2tBcnJheTo6
c2l6ZSgpCiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCi0jZW5kaWYKKyNlbmRpZiAvLyBNYXJrU3Rh
Y2tJbmxpbmVzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNp
dG9yLmNwcAkocmV2aXNpb24gMTMzOTczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
U2xvdFZpc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zLDcgKzMsNyBAQAogCiAjaW5jbHVk
ZSAiQ29uc2VydmF0aXZlUm9vdHMuaCIKICNpbmNsdWRlICJDb3BpZWRTcGFjZS5oIgotI2luY2x1
ZGUgIkNvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5s
aW5lcy5oIgogI2luY2x1ZGUgIkdDVGhyZWFkLmgiCiAjaW5jbHVkZSAiSlNBcnJheS5oIgogI2lu
Y2x1ZGUgIkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9TbG90VmlzaXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1Nsb3RWaXNpdG9yLmgJKHJldmlzaW9uIDEzMzk3MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcg
QEAKICNkZWZpbmUgU2xvdFZpc2l0b3JfaAogCiAjaW5jbHVkZSAiSGFuZGxlVHlwZXMuaCIKLSNp
bmNsdWRlICJNYXJrU3RhY2tJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiTWFya1N0YWNrSW5s
aW5lcy5oIgogCiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklubGluZU1ldGhvZHMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklubGluZU1ldGhv
ZHMuaAkocmV2aXNpb24gMTMzOTczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xv
dFZpc2l0b3JJbmxpbmVNZXRob2RzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTc0ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaWZuZGVmIFNsb3RWaXNpdG9ySW5saW5lTWV0aG9kc19oCi0jZGVmaW5l
IFNsb3RWaXNpdG9ySW5saW5lTWV0aG9kc19oCi0KLSNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGlu
ZU1ldGhvZHMuaCIKLSNpbmNsdWRlICJPcHRpb25zLmgiCi0jaW5jbHVkZSAiU2xvdFZpc2l0b3Iu
aCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6
YXBwZW5kKEpTVmFsdWUqIHNsb3QsIHNpemVfdCBjb3VudCkKLXsKLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgSlNWYWx1ZSYgdmFsdWUgPSBzbG90W2ld
OwotICAgICAgICBpbnRlcm5hbEFwcGVuZCh2YWx1ZSk7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBUPgotaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFVuYmFycmllcmVkUG9p
bnRlcihUKiogc2xvdCkKLXsKLSAgICBBU1NFUlQoc2xvdCk7Ci0gICAgSlNDZWxsKiBjZWxsID0g
KnNsb3Q7Ci0gICAgaW50ZXJuYWxBcHBlbmQoY2VsbCk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9p
ZCBTbG90VmlzaXRvcjo6YXBwZW5kKEpTVmFsdWUqIHNsb3QpCi17Ci0gICAgQVNTRVJUKHNsb3Qp
OwotICAgIGludGVybmFsQXBwZW5kKCpzbG90KTsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIFNs
b3RWaXNpdG9yOjphcHBlbmRVbmJhcnJpZXJlZFZhbHVlKEpTVmFsdWUqIHNsb3QpCi17Ci0gICAg
QVNTRVJUKHNsb3QpOwotICAgIGludGVybmFsQXBwZW5kKCpzbG90KTsKLX0KLQotQUxXQVlTX0lO
TElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmQoSlNDZWxsKiogc2xvdCkKLXsKLSAgICBBU1NF
UlQoc2xvdCk7Ci0gICAgaW50ZXJuYWxBcHBlbmQoKnNsb3QpOwotfQotCi1BTFdBWVNfSU5MSU5F
IHZvaWQgU2xvdFZpc2l0b3I6OmludGVybmFsQXBwZW5kKEpTVmFsdWUgdmFsdWUpCi17Ci0gICAg
aWYgKCF2YWx1ZSB8fCAhdmFsdWUuaXNDZWxsKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpbnRl
cm5hbEFwcGVuZCh2YWx1ZS5hc0NlbGwoKSk7Ci19Ci0KLWlubGluZSB2b2lkIFNsb3RWaXNpdG9y
OjphZGRXZWFrUmVmZXJlbmNlSGFydmVzdGVyKFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIqIHdlYWtS
ZWZlcmVuY2VIYXJ2ZXN0ZXIpCi17Ci0gICAgbV9zaGFyZWQubV93ZWFrUmVmZXJlbmNlSGFydmVz
dGVycy5hZGRUaHJlYWRTYWZlKHdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIpOwotfQotCi1pbmxpbmUg
dm9pZCBTbG90VmlzaXRvcjo6YWRkVW5jb25kaXRpb25hbEZpbmFsaXplcihVbmNvbmRpdGlvbmFs
RmluYWxpemVyKiB1bmNvbmRpdGlvbmFsRmluYWxpemVyKQotewotICAgIG1fc2hhcmVkLm1fdW5j
b25kaXRpb25hbEZpbmFsaXplcnMuYWRkVGhyZWFkU2FmZSh1bmNvbmRpdGlvbmFsRmluYWxpemVy
KTsKLX0KLQotaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OmFkZE9wYXF1ZVJvb3Qodm9pZCogcm9v
dCkKLXsKLSNpZiBFTkFCTEUoUEFSQUxMRUxfR0MpCi0gICAgaWYgKE9wdGlvbnM6Om51bWJlck9m
R0NNYXJrZXJzKCkgPT0gMSkgewotICAgICAgICAvLyBQdXQgZGlyZWN0bHkgaW50byB0aGUgc2hh
cmVkIEhhc2hTZXQuCi0gICAgICAgIG1fc2hhcmVkLm1fb3BhcXVlUm9vdHMuYWRkKHJvb3QpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIC8vIFB1dCBpbnRvIHRoZSBsb2NhbCBzZXQsIGJ1
dCBtZXJnZSB3aXRoIHRoZSBzaGFyZWQgb25lIGV2ZXJ5IG9uY2UgaW4KLSAgICAvLyBhIHdoaWxl
IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBsb2NhbCBzZXRzIGRvbid0IGdyb3cgdG9vIGxhcmdlLgot
ICAgIG1lcmdlT3BhcXVlUm9vdHNJZlByb2ZpdGFibGUoKTsKLSAgICBtX29wYXF1ZVJvb3RzLmFk
ZChyb290KTsKLSNlbHNlCi0gICAgbV9vcGFxdWVSb290cy5hZGQocm9vdCk7Ci0jZW5kaWYKLX0K
LQotaW5saW5lIGJvb2wgU2xvdFZpc2l0b3I6OmNvbnRhaW5zT3BhcXVlUm9vdCh2b2lkKiByb290
KQotewotICAgIEFTU0VSVCghbV9pc0luUGFyYWxsZWxNb2RlKTsKLSNpZiBFTkFCTEUoUEFSQUxM
RUxfR0MpCi0gICAgQVNTRVJUKG1fb3BhcXVlUm9vdHMuaXNFbXB0eSgpKTsKLSAgICByZXR1cm4g
bV9zaGFyZWQubV9vcGFxdWVSb290cy5jb250YWlucyhyb290KTsKLSNlbHNlCi0gICAgcmV0dXJu
IG1fb3BhcXVlUm9vdHMuY29udGFpbnMocm9vdCk7Ci0jZW5kaWYKLX0KLQotaW5saW5lIGludCBT
bG90VmlzaXRvcjo6b3BhcXVlUm9vdENvdW50KCkKLXsKLSAgICBBU1NFUlQoIW1faXNJblBhcmFs
bGVsTW9kZSk7Ci0jaWYgRU5BQkxFKFBBUkFMTEVMX0dDKQotICAgIEFTU0VSVChtX29wYXF1ZVJv
b3RzLmlzRW1wdHkoKSk7Ci0gICAgcmV0dXJuIG1fc2hhcmVkLm1fb3BhcXVlUm9vdHMuc2l6ZSgp
OwotI2Vsc2UKLSAgICByZXR1cm4gbV9vcGFxdWVSb290cy5zaXplKCk7Ci0jZW5kaWYKLX0KLQot
aW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6Om1lcmdlT3BhcXVlUm9vdHNJZk5lY2Vzc2FyeSgpCi17
Ci0gICAgaWYgKG1fb3BhcXVlUm9vdHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0gICAg
bWVyZ2VPcGFxdWVSb290cygpOwotfQotICAgIAotaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6Om1l
cmdlT3BhcXVlUm9vdHNJZlByb2ZpdGFibGUoKQotewotICAgIGlmIChzdGF0aWNfY2FzdDx1bnNp
Z25lZD4obV9vcGFxdWVSb290cy5zaXplKCkpIDwgT3B0aW9uczo6b3BhcXVlUm9vdE1lcmdlVGhy
ZXNob2xkKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtZXJnZU9wYXF1ZVJvb3RzKCk7Ci19Ci0g
ICAgCi1pbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6ZG9uYXRlKCkKLXsKLSAgICBBU1NFUlQobV9p
c0luUGFyYWxsZWxNb2RlKTsKLSAgICBpZiAoT3B0aW9uczo6bnVtYmVyT2ZHQ01hcmtlcnMoKSA9
PSAxKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgZG9uYXRlS25vd25QYXJhbGxlbCgpOwot
fQotCi1pbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6ZG9uYXRlQW5kRHJhaW4oKQotewotICAgIGRv
bmF0ZSgpOwotICAgIGRyYWluKCk7Ci19Ci0KLWlubGluZSB2b2lkIFNsb3RWaXNpdG9yOjpjb3B5
TGF0ZXIodm9pZCogcHRyLCBzaXplX3QgYnl0ZXMpCi17Ci0gICAgaWYgKENvcGllZFNwYWNlOjpp
c092ZXJzaXplKGJ5dGVzKSkgewotICAgICAgICBtX3NoYXJlZC5tX2NvcGllZFNwYWNlLT5waW4o
Q29waWVkU3BhY2U6Om92ZXJzaXplQmxvY2tGb3IocHRyKSk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBDb3BpZWRCbG9jayogYmxvY2sgPSBDb3BpZWRTcGFjZTo6YmxvY2tGb3IocHRy
KTsKLSAgICBpZiAoYmxvY2stPmlzUGlubmVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGJs
b2NrLT5yZXBvcnRMaXZlQnl0ZXMoYnl0ZXMpOwotCi0gICAgaWYgKCFibG9jay0+c2hvdWxkRXZh
Y3VhdGUoKSkKLSAgICAgICAgbV9zaGFyZWQubV9jb3BpZWRTcGFjZS0+cGluKGJsb2NrKTsKLX0K
LSAgICAKLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gU2xvdFZpc2l0b3JJbmxpbmVN
ZXRob2RzX2gKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJ
bmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZp
c2l0b3JJbmxpbmVzLmgJKHJldmlzaW9uIDEzMzM4OSkJKGZyb20gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVNZXRob2RzLmg6MTMzMzg5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNsb3RWaXNpdG9ySW5saW5lTWV0
aG9kc19oCisjZGVmaW5lIFNsb3RWaXNpdG9ySW5saW5lTWV0aG9kc19oCisKKyNpbmNsdWRlICJD
b3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJPcHRpb25zLmgiCisjaW5jbHVk
ZSAiU2xvdFZpc2l0b3IuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK0FMV0FZU19JTkxJTkUgdm9p
ZCBTbG90VmlzaXRvcjo6YXBwZW5kKEpTVmFsdWUqIHNsb3QsIHNpemVfdCBjb3VudCkKK3sKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgSlNWYWx1ZSYg
dmFsdWUgPSBzbG90W2ldOworICAgICAgICBpbnRlcm5hbEFwcGVuZCh2YWx1ZSk7CisgICAgfQor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgoraW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVu
ZFVuYmFycmllcmVkUG9pbnRlcihUKiogc2xvdCkKK3sKKyAgICBBU1NFUlQoc2xvdCk7CisgICAg
SlNDZWxsKiBjZWxsID0gKnNsb3Q7CisgICAgaW50ZXJuYWxBcHBlbmQoY2VsbCk7Cit9CisKK0FM
V0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kKEpTVmFsdWUqIHNsb3QpCit7Cisg
ICAgQVNTRVJUKHNsb3QpOworICAgIGludGVybmFsQXBwZW5kKCpzbG90KTsKK30KKworQUxXQVlT
X0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRVbmJhcnJpZXJlZFZhbHVlKEpTVmFsdWUq
IHNsb3QpCit7CisgICAgQVNTRVJUKHNsb3QpOworICAgIGludGVybmFsQXBwZW5kKCpzbG90KTsK
K30KKworQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmQoSlNDZWxsKiogc2xv
dCkKK3sKKyAgICBBU1NFUlQoc2xvdCk7CisgICAgaW50ZXJuYWxBcHBlbmQoKnNsb3QpOworfQor
CitBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmludGVybmFsQXBwZW5kKEpTVmFsdWUg
dmFsdWUpCit7CisgICAgaWYgKCF2YWx1ZSB8fCAhdmFsdWUuaXNDZWxsKCkpCisgICAgICAgIHJl
dHVybjsKKyAgICBpbnRlcm5hbEFwcGVuZCh2YWx1ZS5hc0NlbGwoKSk7Cit9CisKK2lubGluZSB2
b2lkIFNsb3RWaXNpdG9yOjphZGRXZWFrUmVmZXJlbmNlSGFydmVzdGVyKFdlYWtSZWZlcmVuY2VI
YXJ2ZXN0ZXIqIHdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIpCit7CisgICAgbV9zaGFyZWQubV93ZWFr
UmVmZXJlbmNlSGFydmVzdGVycy5hZGRUaHJlYWRTYWZlKHdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIp
OworfQorCitpbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6YWRkVW5jb25kaXRpb25hbEZpbmFsaXpl
cihVbmNvbmRpdGlvbmFsRmluYWxpemVyKiB1bmNvbmRpdGlvbmFsRmluYWxpemVyKQoreworICAg
IG1fc2hhcmVkLm1fdW5jb25kaXRpb25hbEZpbmFsaXplcnMuYWRkVGhyZWFkU2FmZSh1bmNvbmRp
dGlvbmFsRmluYWxpemVyKTsKK30KKworaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OmFkZE9wYXF1
ZVJvb3Qodm9pZCogcm9vdCkKK3sKKyNpZiBFTkFCTEUoUEFSQUxMRUxfR0MpCisgICAgaWYgKE9w
dGlvbnM6Om51bWJlck9mR0NNYXJrZXJzKCkgPT0gMSkgeworICAgICAgICAvLyBQdXQgZGlyZWN0
bHkgaW50byB0aGUgc2hhcmVkIEhhc2hTZXQuCisgICAgICAgIG1fc2hhcmVkLm1fb3BhcXVlUm9v
dHMuYWRkKHJvb3QpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIC8vIFB1dCBpbnRvIHRo
ZSBsb2NhbCBzZXQsIGJ1dCBtZXJnZSB3aXRoIHRoZSBzaGFyZWQgb25lIGV2ZXJ5IG9uY2UgaW4K
KyAgICAvLyBhIHdoaWxlIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBsb2NhbCBzZXRzIGRvbid0IGdy
b3cgdG9vIGxhcmdlLgorICAgIG1lcmdlT3BhcXVlUm9vdHNJZlByb2ZpdGFibGUoKTsKKyAgICBt
X29wYXF1ZVJvb3RzLmFkZChyb290KTsKKyNlbHNlCisgICAgbV9vcGFxdWVSb290cy5hZGQocm9v
dCk7CisjZW5kaWYKK30KKworaW5saW5lIGJvb2wgU2xvdFZpc2l0b3I6OmNvbnRhaW5zT3BhcXVl
Um9vdCh2b2lkKiByb290KQoreworICAgIEFTU0VSVCghbV9pc0luUGFyYWxsZWxNb2RlKTsKKyNp
ZiBFTkFCTEUoUEFSQUxMRUxfR0MpCisgICAgQVNTRVJUKG1fb3BhcXVlUm9vdHMuaXNFbXB0eSgp
KTsKKyAgICByZXR1cm4gbV9zaGFyZWQubV9vcGFxdWVSb290cy5jb250YWlucyhyb290KTsKKyNl
bHNlCisgICAgcmV0dXJuIG1fb3BhcXVlUm9vdHMuY29udGFpbnMocm9vdCk7CisjZW5kaWYKK30K
KworaW5saW5lIGludCBTbG90VmlzaXRvcjo6b3BhcXVlUm9vdENvdW50KCkKK3sKKyAgICBBU1NF
UlQoIW1faXNJblBhcmFsbGVsTW9kZSk7CisjaWYgRU5BQkxFKFBBUkFMTEVMX0dDKQorICAgIEFT
U0VSVChtX29wYXF1ZVJvb3RzLmlzRW1wdHkoKSk7CisgICAgcmV0dXJuIG1fc2hhcmVkLm1fb3Bh
cXVlUm9vdHMuc2l6ZSgpOworI2Vsc2UKKyAgICByZXR1cm4gbV9vcGFxdWVSb290cy5zaXplKCk7
CisjZW5kaWYKK30KKworaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6Om1lcmdlT3BhcXVlUm9vdHNJ
Zk5lY2Vzc2FyeSgpCit7CisgICAgaWYgKG1fb3BhcXVlUm9vdHMuaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm47CisgICAgbWVyZ2VPcGFxdWVSb290cygpOworfQorICAgIAoraW5saW5lIHZvaWQg
U2xvdFZpc2l0b3I6Om1lcmdlT3BhcXVlUm9vdHNJZlByb2ZpdGFibGUoKQoreworICAgIGlmIChz
dGF0aWNfY2FzdDx1bnNpZ25lZD4obV9vcGFxdWVSb290cy5zaXplKCkpIDwgT3B0aW9uczo6b3Bh
cXVlUm9vdE1lcmdlVGhyZXNob2xkKCkpCisgICAgICAgIHJldHVybjsKKyAgICBtZXJnZU9wYXF1
ZVJvb3RzKCk7Cit9CisgICAgCitpbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6ZG9uYXRlKCkKK3sK
KyAgICBBU1NFUlQobV9pc0luUGFyYWxsZWxNb2RlKTsKKyAgICBpZiAoT3B0aW9uczo6bnVtYmVy
T2ZHQ01hcmtlcnMoKSA9PSAxKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgZG9uYXRlS25v
d25QYXJhbGxlbCgpOworfQorCitpbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6ZG9uYXRlQW5kRHJh
aW4oKQoreworICAgIGRvbmF0ZSgpOworICAgIGRyYWluKCk7Cit9CisKK2lubGluZSB2b2lkIFNs
b3RWaXNpdG9yOjpjb3B5TGF0ZXIodm9pZCogcHRyLCBzaXplX3QgYnl0ZXMpCit7CisgICAgaWYg
KENvcGllZFNwYWNlOjppc092ZXJzaXplKGJ5dGVzKSkgeworICAgICAgICBtX3NoYXJlZC5tX2Nv
cGllZFNwYWNlLT5waW4oQ29waWVkU3BhY2U6Om92ZXJzaXplQmxvY2tGb3IocHRyKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBDb3BpZWRCbG9jayogYmxvY2sgPSBDb3BpZWRTcGFj
ZTo6YmxvY2tGb3IocHRyKTsKKyAgICBpZiAoYmxvY2stPmlzUGlubmVkKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIGJsb2NrLT5yZXBvcnRMaXZlQnl0ZXMoYnl0ZXMpOworCisgICAgaWYgKCFi
bG9jay0+c2hvdWxkRXZhY3VhdGUoKSkKKyAgICAgICAgbV9zaGFyZWQubV9jb3BpZWRTcGFjZS0+
cGluKGJsb2NrKTsKK30KKyAgICAKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gU2xv
dFZpc2l0b3JJbmxpbmVNZXRob2RzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgJKHJldmlzaW9uIDEzMzM4OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yMywxMCArMjMsMTAgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
ICAqLwogCi0jaWZuZGVmIFNsb3RWaXNpdG9ySW5saW5lTWV0aG9kc19oCi0jZGVmaW5lIFNsb3RW
aXNpdG9ySW5saW5lTWV0aG9kc19oCisjaWZuZGVmIFNsb3RWaXNpdG9ySW5saW5lc19oCisjZGVm
aW5lIFNsb3RWaXNpdG9ySW5saW5lc19oCiAKLSNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZU1l
dGhvZHMuaCIKKyNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZXMuaCIKICNpbmNsdWRlICJPcHRp
b25zLmgiCiAjaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKIApAQCAtMTcwLDUgKzE3MCw1IEBAIGlu
bGluZSB2b2lkIFNsb3RWaXNpdG9yOjpjb3B5TGF0ZXIodm9pZCoKICAgICAKIH0gLy8gbmFtZXNw
YWNlIEpTQwogCi0jZW5kaWYgLy8gU2xvdFZpc2l0b3JJbmxpbmVNZXRob2RzX2gKKyNlbmRpZiAv
LyBTbG90VmlzaXRvcklubGluZXNfaAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0hvc3RDYWxsUmV0dXJuVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSG9zdENhbGxSZXR1cm5WYWx1ZS5jcHAJKHJldmlzaW9uIDEzMzk3MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSG9zdENhbGxSZXR1cm5WYWx1ZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRl
IDx3dGYvSW5saW5lQVNNLmg+CiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKLSNpbmNsdWRlICJKU1Zh
bHVlSW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkpTVmFsdWVJbmxpbmVzLmgiCiAKIAogbmFt
ZXNwYWNlIEpTQyB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiAx
MzM5NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM4LDcgKzM4LDcgQEAgSlNDOjpNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6U1NFMkNo
ZWNrUwogI2luY2x1ZGUgPHd0Zi9DcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlci5oPgogI2lu
Y2x1ZGUgIkRGR05vZGUuaCIgLy8gZm9yIERGR19TVUNDRVNTX1NUQVRTCiAjaW5jbHVkZSAiSW50
ZXJwcmV0ZXIuaCIKLSNpbmNsdWRlICJKSVRJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiSklU
SW5saW5lcy5oIgogI2luY2x1ZGUgIkpJVFN0dWJDYWxsLmgiCiAjaW5jbHVkZSAiSlNBcnJheS5o
IgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUQXJpdGhtZXRpYzMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVEFyaXRobWV0aWMzMl82NC5jcHAJKHJldmlzaW9uIDEzMzk3MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYzMyXzY0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzAsNyArMzAsNyBAQAogI2luY2x1ZGUgIkpJVC5oIgogCiAjaW5jbHVkZSAiQ29k
ZUJsb2NrLmgiCi0jaW5jbHVkZSAiSklUSW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkpJVElu
bGluZXMuaCIKICNpbmNsdWRlICJKSVRTdHViQ2FsbC5oIgogI2luY2x1ZGUgIkpJVFN0dWJzLmgi
CiAjaW5jbHVkZSAiSlNBcnJheS5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRBcml0aG1ldGljLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVEFyaXRobWV0aWMuY3BwCShyZXZpc2lvbiAxMzM5NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3
IEBACiAjaW5jbHVkZSAiSklULmgiCiAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKLSNpbmNsdWRl
ICJKSVRJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiSklUSW5saW5lcy5oIgogI2luY2x1ZGUg
IkpJVFN0dWJDYWxsLmgiCiAjaW5jbHVkZSAiSklUU3R1YnMuaCIKICNpbmNsdWRlICJKU0FycmF5
LmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCShy
ZXZpc2lvbiAxMzM5NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82
NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlICJBcmd1bWVu
dHMuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgot
I2luY2x1ZGUgIkpJVElubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiSklUU3R1YkNhbGwuaCIKICNpbmNsdWRlICJKU0FycmF5LmgiCiAjaW5jbHVkZSAi
SlNGdW5jdGlvbi5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCShy
ZXZpc2lvbiAxMzM5NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAKICNpbmNsdWRlICJBcmd1bWVudHMu
aCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKLSNpbmNsdWRlICJKSVRJbmxpbmVNZXRob2RzLmgi
CisjaW5jbHVkZSAiSklUSW5saW5lcy5oIgogI2luY2x1ZGUgIkpJVFN0dWJDYWxsLmgiCiAjaW5j
bHVkZSAiSlNBcnJheS5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAxMzM5NzMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZU1ldGhvZHMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSwxMDA3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIw
MTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBKSVRJbmxpbmVNZXRob2RzX2gKLSNkZWZp
bmUgSklUSW5saW5lTWV0aG9kc19oCi0KLQotI2lmIEVOQUJMRShKSVQpCi0KLW5hbWVzcGFjZSBK
U0MgewotCi1BTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudEltbWVkaWF0
ZURvdWJsZSh1bnNpZ25lZCBzcmMpCi17Ci0gICAgcmV0dXJuIG1fY29kZUJsb2NrLT5pc0NvbnN0
YW50UmVnaXN0ZXJJbmRleChzcmMpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzRG91Ymxl
KCk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgSlNWYWx1ZSBKSVQ6OmdldENvbnN0YW50T3BlcmFuZCh1
bnNpZ25lZCBzcmMpCi17Ci0gICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0
ZXJJbmRleChzcmMpKTsKLSAgICByZXR1cm4gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7
Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRDZWxsVG9DYWxsRnJhbWVIZWFk
ZXIoUmVnaXN0ZXJJRCBmcm9tLCBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJFbnRyeSBlbnRyeSkK
LXsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OkNlbGxUYWcpLCB0YWdGb3IoZW50cnksIGNhbGxGcmFtZVJlZ2lzdGVyKSk7Ci0gICAgc3Rv
cmUzMihmcm9tLCBwYXlsb2FkRm9yKGVudHJ5LCBjYWxsRnJhbWVSZWdpc3RlcikpOwotI2Vsc2UK
LSAgICBzdG9yZTY0KGZyb20sIGFkZHJlc3NGb3IoZW50cnksIGNhbGxGcmFtZVJlZ2lzdGVyKSk7
Ci0jZW5kaWYKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dEludFRvQ2FsbEZy
YW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyRW50cnkg
ZW50cnkpCi17Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICBzdG9yZTMyKFRydXN0ZWRJbW0z
MihJbnQzMlRhZyksIGludFRhZ0ZvcihlbnRyeSwgY2FsbEZyYW1lUmVnaXN0ZXIpKTsKLSAgICBz
dG9yZTMyKGZyb20sIGludFBheWxvYWRGb3IoZW50cnksIGNhbGxGcmFtZVJlZ2lzdGVyKSk7Ci0j
ZWxzZQotICAgIHN0b3JlNjQoZnJvbSwgYWRkcmVzc0ZvcihlbnRyeSwgY2FsbEZyYW1lUmVnaXN0
ZXIpKTsKLSNlbmRpZgotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0VG9DYWxs
RnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJFbnRy
eSBlbnRyeSkKLXsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIHN0b3JlUHRyKGZyb20sIHBh
eWxvYWRGb3IoZW50cnksIGNhbGxGcmFtZVJlZ2lzdGVyKSk7Ci0jZWxzZQotICAgIHN0b3JlNjQo
ZnJvbSwgYWRkcmVzc0ZvcihlbnRyeSwgY2FsbEZyYW1lUmVnaXN0ZXIpKTsKLSNlbmRpZgotfQot
Ci1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0SW1tZWRpYXRlVG9DYWxsRnJhbWVIZWFk
ZXIodm9pZCogdmFsdWUsIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlckVudHJ5IGVudHJ5KQotewot
ICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIodmFsdWUpLCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lz
dGVyLCBlbnRyeSAqIHNpemVvZihSZWdpc3RlcikpKTsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6ZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoSlNTdGFjazo6Q2FsbEZyYW1lSGVh
ZGVyRW50cnkgZW50cnksIFJlZ2lzdGVySUQgdG8sIFJlZ2lzdGVySUQgZnJvbSkKLXsKLSAgICBs
b2FkUHRyKEFkZHJlc3MoZnJvbSwgZW50cnkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgdG8pOwotI2lm
IFVTRShKU1ZBTFVFNjQpCi0gICAga2lsbExhc3RSZXN1bHRSZWdpc3RlcigpOwotI2VuZGlmCi19
Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyMzIo
SlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyRW50cnkgZW50cnksIFJlZ2lzdGVySUQgdG8sIFJlZ2lz
dGVySUQgZnJvbSkKLXsKLSAgICBsb2FkMzIoQWRkcmVzcyhmcm9tLCBlbnRyeSAqIHNpemVvZihS
ZWdpc3RlcikpLCB0byk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBraWxsTGFzdFJlc3VsdFJl
Z2lzdGVyKCk7Ci0jZW5kaWYKLX0KLQotI2lmIFVTRShKU1ZBTFVFNjQpCi1BTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjplbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlcjY0KEpTU3RhY2s6OkNhbGxGcmFt
ZUhlYWRlckVudHJ5IGVudHJ5LCBSZWdpc3RlcklEIHRvLCBSZWdpc3RlcklEIGZyb20pCi17Ci0g
ICAgbG9hZDY0KEFkZHJlc3MoZnJvbSwgZW50cnkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgdG8pOwot
ICAgIGtpbGxMYXN0UmVzdWx0UmVnaXN0ZXIoKTsKLX0KLSNlbmRpZgotCi1BTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjplbWl0TG9hZENoYXJhY3RlclN0cmluZyhSZWdpc3RlcklEIHNyYywgUmVnaXN0
ZXJJRCBkc3QsIEp1bXBMaXN0JiBmYWlsdXJlcykKLXsKLSAgICBmYWlsdXJlcy5hcHBlbmQoYnJh
bmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHNyYywgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSks
IFRydXN0ZWRJbW1QdHIobV9nbG9iYWxEYXRhLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7Ci0g
ICAgZmFpbHVyZXMuYXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhzcmMsIFRodW5rSGVscGVyczo6anNTdHJpbmdMZW5ndGhPZmZzZXQoKSksIFRydXN0ZWRJ
bW0zMigxKSkpOwotICAgIGxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3JjLCBUaHVu
a0hlbHBlcnM6OmpzU3RyaW5nVmFsdWVPZmZzZXQoKSksIGRzdCk7Ci0gICAgZmFpbHVyZXMuYXBw
ZW5kKGJyYW5jaFRlc3QzMihaZXJvLCBkc3QpKTsKLSAgICBsb2FkUHRyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGRzdCwgVGh1bmtIZWxwZXJzOjpzdHJpbmdJbXBsRmxhZ3NPZmZzZXQoKSksIHJl
Z1QxKTsKLSAgICBsb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGRzdCwgVGh1bmtIZWxw
ZXJzOjpzdHJpbmdJbXBsRGF0YU9mZnNldCgpKSwgZHN0KTsKLQotICAgIEp1bXBMaXN0IGlzMTZC
aXQ7Ci0gICAgSnVtcExpc3QgY29udDhCaXQ7Ci0gICAgaXMxNkJpdC5hcHBlbmQoYnJhbmNoVGVz
dDMyKFplcm8sIHJlZ1QxLCBUcnVzdGVkSW1tMzIoVGh1bmtIZWxwZXJzOjpzdHJpbmdJbXBsOEJp
dEZsYWcoKSkpKTsKLSAgICBsb2FkOChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhkc3QsIDApLCBk
c3QpOwotICAgIGNvbnQ4Qml0LmFwcGVuZChqdW1wKCkpOwotICAgIGlzMTZCaXQubGluayh0aGlz
KTsKLSAgICBsb2FkMTYoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZHN0LCAwKSwgZHN0KTsKLSAg
ICBjb250OEJpdC5saW5rKHRoaXMpOwotfQotCi1BTFdBWVNfSU5MSU5FIEpJVDo6Q2FsbCBKSVQ6
OmVtaXROYWtlZENhbGwoQ29kZVB0ciBmdW5jdGlvbikKLXsKLSAgICBBU1NFUlQobV9ieXRlY29k
ZU9mZnNldCAhPSAodW5zaWduZWQpLTEpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBj
YWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2Rl
T2Zmc2V0IGlzIHNldC4KLQotICAgIENhbGwgbmFrZWRDYWxsID0gbmVhckNhbGwoKTsKLSAgICBt
X2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKG5ha2VkQ2FsbCwgbV9ieXRlY29kZU9mZnNldCwgZnVu
Y3Rpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwotICAgIHJldHVybiBuYWtlZENhbGw7Ci19Ci0K
LUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmF0SnVtcFRhcmdldCgpCi17Ci0gICAgd2hpbGUgKG1f
anVtcFRhcmdldHNQb3NpdGlvbiA8IG1fY29kZUJsb2NrLT5udW1iZXJPZkp1bXBUYXJnZXRzKCkg
JiYgbV9jb2RlQmxvY2stPmp1bXBUYXJnZXQobV9qdW1wVGFyZ2V0c1Bvc2l0aW9uKSA8PSBtX2J5
dGVjb2RlT2Zmc2V0KSB7Ci0gICAgICAgIGlmIChtX2NvZGVCbG9jay0+anVtcFRhcmdldChtX2p1
bXBUYXJnZXRzUG9zaXRpb24pID09IG1fYnl0ZWNvZGVPZmZzZXQpCi0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgKyttX2p1bXBUYXJnZXRzUG9zaXRpb247Ci0gICAgfQotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQotI2lmIGRlZmluZWQoQVNTRU1CTEVSX0hBU19DT05TVEFOVF9QT09M
KSAmJiBBU1NFTUJMRVJfSEFTX0NPTlNUQU5UX1BPT0wKLQotQUxXQVlTX0lOTElORSB2b2lkIEpJ
VDo6YmVnaW5VbmludGVycnVwdGVkU2VxdWVuY2UoaW50IGluc25TcGFjZSwgaW50IGNvbnN0U3Bh
Y2UpCi17Ci0jaWYgQ1BVKEFSTV9UUkFESVRJT05BTCkKLSNpZm5kZWYgTkRFQlVHCi0gICAgLy8g
RW5zdXJlIHRoZSBsYWJlbCBhZnRlciB0aGUgc2VxdWVuY2UgY2FuIGFsc28gZml0Ci0gICAgaW5z
blNwYWNlICs9IHNpemVvZihBUk1Xb3JkKTsKLSAgICBjb25zdFNwYWNlICs9IHNpemVvZih1aW50
NjRfdCk7Ci0jZW5kaWYKLQotICAgIGVuc3VyZVNwYWNlKGluc25TcGFjZSwgY29uc3RTcGFjZSk7
Ci0KLSNlbGlmIENQVShTSDQpCi0jaWZuZGVmIE5ERUJVRwotICAgIGluc25TcGFjZSArPSBzaXpl
b2YoU0g0V29yZCk7Ci0gICAgY29uc3RTcGFjZSArPSBzaXplb2YodWludDY0X3QpOwotI2VuZGlm
Ci0KLSAgICBtX2Fzc2VtYmxlci5lbnN1cmVTcGFjZShpbnNuU3BhY2UgKyBtX2Fzc2VtYmxlci5t
YXhJbnN0cnVjdGlvblNpemUgKyAyLCBjb25zdFNwYWNlICsgOCk7Ci0jZW5kaWYKLQotI2lmIGRl
ZmluZWQoQVNTRU1CTEVSX0hBU19DT05TVEFOVF9QT09MKSAmJiBBU1NFTUJMRVJfSEFTX0NPTlNU
QU5UX1BPT0wKLSNpZm5kZWYgTkRFQlVHCi0gICAgbV91bmludGVycnVwdGVkSW5zdHJ1Y3Rpb25T
ZXF1ZW5jZUJlZ2luID0gbGFiZWwoKTsKLSAgICBtX3VuaW50ZXJydXB0ZWRDb25zdGFudFNlcXVl
bmNlQmVnaW4gPSBzaXplT2ZDb25zdGFudFBvb2woKTsKLSNlbmRpZgotI2VuZGlmCi19Ci0KLUFM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVuZFVuaW50ZXJydXB0ZWRTZXF1ZW5jZShpbnQgaW5zblNw
YWNlLCBpbnQgY29uc3RTcGFjZSwgaW50IGRzdCkKLXsKLSAgICBVTlVTRURfUEFSQU0oZHN0KTsK
LSNpZiBkZWZpbmVkKEFTU0VNQkxFUl9IQVNfQ09OU1RBTlRfUE9PTCkgJiYgQVNTRU1CTEVSX0hB
U19DT05TVEFOVF9QT09MCi0gICAgLyogVGhlcmUgYXJlIHNldmVyYWwgY2FzZXMgd2hlbiB0aGUg
dW5pbnRlcnJ1cHRlZCBzZXF1ZW5jZSBpcyBsYXJnZXIgdGhhbgotICAgICAqIG1heGltdW0gcmVx
dWlyZWQgb2Zmc2V0IGZvciBwYXRoaW5nIHRoZSBzYW1lIHNlcXVlbmNlLiBFZy46IGlmIGluIGEK
LSAgICAgKiB1bmludGVycnVwdGVkIHNlcXVlbmNlIHRoZSBsYXN0IG1hY3JvYXNzZW1ibGVyJ3Mg
aW5zdHJ1Y3Rpb24gaXMgYSBzdHViCi0gICAgICogY2FsbCwgaXQgZW1pdHMgc3RvcmUgaW5zdHJ1
Y3Rpb24ocykgd2hpY2ggc2hvdWxkIG5vdCBiZSBpbmNsdWRlZCBpbiB0aGUKLSAgICAgKiBjYWxj
dWxhdGlvbiBvZiBsZW5ndGggb2YgdW5pbnRlcnJ1cHRlZCBzZXF1ZW5jZS4gU28sIHRoZSBpbnNu
U3BhY2UgYW5kCi0gICAgICogY29uc3RTcGFjZSBzaG91bGQgYmUgdXBwZXIgbGltaXQgaW5zdGVh
ZCBvZiBoYXJkIGxpbWl0LgotICAgICAqLwotI2lmIENQVShTSDQpCi0gICAgaWYgKChkc3QgPiAx
NSkgfHwgKGRzdCA8IC0xNikpIHsKLSAgICAgICAgaW5zblNwYWNlICs9IDg7Ci0gICAgICAgIGNv
bnN0U3BhY2UgKz0gMjsKLSAgICB9Ci0KLSAgICBpZiAoKChkc3QgPj0gLTE2KSAmJiAoZHN0IDwg
MCkpIHx8ICgoZHN0ID4gNykgJiYgKGRzdCA8PSAxNSkpKQotICAgICAgICBpbnNuU3BhY2UgKz0g
ODsKLSNlbmRpZgotICAgIEFTU0VSVChkaWZmZXJlbmNlQmV0d2VlbihtX3VuaW50ZXJydXB0ZWRJ
bnN0cnVjdGlvblNlcXVlbmNlQmVnaW4sIGxhYmVsKCkpIDw9IGluc25TcGFjZSk7Ci0gICAgQVNT
RVJUKHNpemVPZkNvbnN0YW50UG9vbCgpIC0gbV91bmludGVycnVwdGVkQ29uc3RhbnRTZXF1ZW5j
ZUJlZ2luIDw9IGNvbnN0U3BhY2UpOwotI2VuZGlmCi19Ci0KLSNlbmRpZgotCi0jaWYgQ1BVKEFS
TSkKLQotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6cHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJD
YWxsKFJlZ2lzdGVySUQgcmVnKQotewotICAgIG1vdmUobGlua1JlZ2lzdGVyLCByZWcpOwotfQot
Ci1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpyZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVy
bihSZWdpc3RlcklEIHJlZykKLXsKLSAgICBtb3ZlKHJlZywgbGlua1JlZ2lzdGVyKTsKLX0KLQot
QUxXQVlTX0lOTElORSB2b2lkIEpJVDo6cmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4o
QWRkcmVzcyBhZGRyZXNzKQotewotICAgIGxvYWRQdHIoYWRkcmVzcywgbGlua1JlZ2lzdGVyKTsK
LX0KLSNlbGlmIENQVShTSDQpCi0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnByZXNlcnZlUmV0
dXJuQWRkcmVzc0FmdGVyQ2FsbChSZWdpc3RlcklEIHJlZykKLXsKLSAgICBtX2Fzc2VtYmxlci5z
dHNwcihyZWcpOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpyZXN0b3JlUmV0dXJuQWRk
cmVzc0JlZm9yZVJldHVybihSZWdpc3RlcklEIHJlZykKLXsKLSAgICBtX2Fzc2VtYmxlci5sZHNw
cihyZWcpOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpyZXN0b3JlUmV0dXJuQWRkcmVz
c0JlZm9yZVJldHVybihBZGRyZXNzIGFkZHJlc3MpCi17Ci0gICAgbG9hZFB0ckxpbmtSZWcoYWRk
cmVzcyk7Ci19Ci0KLSNlbGlmIENQVShNSVBTKQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpw
cmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwoUmVnaXN0ZXJJRCByZWcpCi17Ci0gICAgbW92
ZShyZXR1cm5BZGRyZXNzUmVnaXN0ZXIsIHJlZyk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6OnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKFJlZ2lzdGVySUQgcmVnKQotewot
ICAgIG1vdmUocmVnLCByZXR1cm5BZGRyZXNzUmVnaXN0ZXIpOwotfQotCi1BTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjpyZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihBZGRyZXNzIGFkZHJl
c3MpCi17Ci0gICAgbG9hZFB0cihhZGRyZXNzLCByZXR1cm5BZGRyZXNzUmVnaXN0ZXIpOwotfQot
Ci0jZWxzZSAvLyBDUFUoWDg2KSB8fCBDUFUoWDg2XzY0KQotCi1BTFdBWVNfSU5MSU5FIHZvaWQg
SklUOjpwcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwoUmVnaXN0ZXJJRCByZWcpCi17Ci0g
ICAgcG9wKHJlZyk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnJlc3RvcmVSZXR1cm5B
ZGRyZXNzQmVmb3JlUmV0dXJuKFJlZ2lzdGVySUQgcmVnKQotewotICAgIHB1c2gocmVnKTsKLX0K
LQotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6cmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1
cm4oQWRkcmVzcyBhZGRyZXNzKQotewotICAgIHB1c2goYWRkcmVzcyk7Ci19Ci0KLSNlbmRpZgot
Ci1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpyZXN0b3JlQXJndW1lbnRSZWZlcmVuY2UoKQotewot
ICAgIG1vdmUoc3RhY2tQb2ludGVyUmVnaXN0ZXIsIGZpcnN0QXJndW1lbnRSZWdpc3Rlcik7Ci0g
ICAgcG9rZShjYWxsRnJhbWVSZWdpc3RlciwgT0JKRUNUX09GRlNFVE9GKHN0cnVjdCBKSVRTdGFj
a0ZyYW1lLCBjYWxsRnJhbWUpIC8gc2l6ZW9mKHZvaWQqKSk7Ci19Ci0KLUFMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OnVwZGF0ZVRvcENhbGxGcmFtZSgpCi17Ci0gICAgQVNTRVJUKHN0YXRpY19jYXN0
PGludD4obV9ieXRlY29kZU9mZnNldCkgPj0gMCk7Ci0gICAgaWYgKG1fYnl0ZWNvZGVPZmZzZXQp
IHsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpICsgbV9ieXRlY29kZU9mZnNldCAr
IDEpLCBpbnRUYWdGb3IoSlNTdGFjazo6QXJndW1lbnRDb3VudCkpOwotI2Vsc2UKLSAgICAgICAg
c3RvcmUzMihUcnVzdGVkSW1tMzIobV9ieXRlY29kZU9mZnNldCArIDEpLCBpbnRUYWdGb3IoSlNT
dGFjazo6QXJndW1lbnRDb3VudCkpOwotI2VuZGlmCi0gICAgfQotICAgIHN0b3JlUHRyKGNhbGxG
cmFtZVJlZ2lzdGVyLCAmbV9nbG9iYWxEYXRhLT50b3BDYWxsRnJhbWUpOwotfQotCi1BTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjpyZXN0b3JlQXJndW1lbnRSZWZlcmVuY2VGb3JUcmFtcG9saW5lKCkK
LXsKLSNpZiBDUFUoWDg2KQotICAgIC8vIFdpdGhpbiBhIHRyYW1wb2xpbmUgdGhlIHJldHVybiBh
ZGRyZXNzIHdpbGwgYmUgb24gdGhlIHN0YWNrIGF0IHRoaXMgcG9pbnQuCi0gICAgYWRkUHRyKFRy
dXN0ZWRJbW0zMihzaXplb2Yodm9pZCopKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIsIGZpcnN0QXJn
dW1lbnRSZWdpc3Rlcik7Ci0jZWxpZiBDUFUoQVJNKQotICAgIG1vdmUoc3RhY2tQb2ludGVyUmVn
aXN0ZXIsIGZpcnN0QXJndW1lbnRSZWdpc3Rlcik7Ci0jZWxpZiBDUFUoU0g0KQotICAgIG1vdmUo
c3RhY2tQb2ludGVyUmVnaXN0ZXIsIGZpcnN0QXJndW1lbnRSZWdpc3Rlcik7Ci0jZW5kaWYKLSAg
ICAvLyBJbiB0aGUgdHJhbXBvbGluZSBvbiB4ODYtNjQsIHRoZSBmaXJzdCBhcmd1bWVudCByZWdp
c3RlciBpcyBub3Qgb3ZlcndyaXR0ZW4uCi19Ci0KLUFMV0FZU19JTkxJTkUgSklUOjpKdW1wIEpJ
VDo6Y2hlY2tTdHJ1Y3R1cmUoUmVnaXN0ZXJJRCByZWcsIFN0cnVjdHVyZSogc3RydWN0dXJlKQot
ewotICAgIHJldHVybiBicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVnLCBKU0NlbGw6OnN0
cnVjdHVyZU9mZnNldCgpKSwgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpKTsKLX0KLQotQUxXQVlT
X0lOTElORSB2b2lkIEpJVDo6bGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlciwgaW50IHZSZWcpCi17Ci0gICAgaWYgKCFtX2NvZGVCbG9j
ay0+aXNLbm93bk5vdEltbWVkaWF0ZSh2UmVnKSkKLSAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIp
OwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphZGRTbG93Q2FzZShKdW1wIGp1bXApCi17
Ci0gICAgQVNTRVJUKG1fYnl0ZWNvZGVPZmZzZXQgIT0gKHVuc2lnbmVkKS0xKTsgLy8gVGhpcyBt
ZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRp
b24sIHNvIHRoYXQgbV9ieXRlY29kZU9mZnNldCBpcyBzZXQuCi0KLSAgICBtX3Nsb3dDYXNlcy5h
cHBlbmQoU2xvd0Nhc2VFbnRyeShqdW1wLCBtX2J5dGVjb2RlT2Zmc2V0KSk7Ci19Ci0KLUFMV0FZ
U19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNsb3dDYXNlKEp1bXBMaXN0IGp1bXBMaXN0KQotewotICAg
IEFTU0VSVChtX2J5dGVjb2RlT2Zmc2V0ICE9ICh1bnNpZ25lZCktMSk7IC8vIFRoaXMgbWV0aG9k
IHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBz
byB0aGF0IG1fYnl0ZWNvZGVPZmZzZXQgaXMgc2V0LgotCi0gICAgY29uc3QgSnVtcExpc3Q6Okp1
bXBWZWN0b3ImIGp1bXBWZWN0b3IgPSBqdW1wTGlzdC5qdW1wcygpOwotICAgIHNpemVfdCBzaXpl
ID0ganVtcFZlY3Rvci5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyAr
K2kpCi0gICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KGp1bXBWZWN0b3Jb
aV0sIG1fYnl0ZWNvZGVPZmZzZXQpKTsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRk
U2xvd0Nhc2UoKQotewotICAgIEFTU0VSVChtX2J5dGVjb2RlT2Zmc2V0ICE9ICh1bnNpZ25lZCkt
MSk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQg
cGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVPZmZzZXQgaXMgc2V0LgotICAgIAot
ICAgIEp1bXAgZW1wdHlKdW1wOyAvLyBEb2luZyBpdCB0aGlzIHdheSB0byBtYWtlIFdpbmRvd3Mg
aGFwcHkuCi0gICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoZW1wdHlKdW1wLCBt
X2J5dGVjb2RlT2Zmc2V0KSk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZEp1bXAo
SnVtcCBqdW1wLCBpbnQgcmVsYXRpdmVPZmZzZXQpCi17Ci0gICAgQVNTRVJUKG1fYnl0ZWNvZGVP
ZmZzZXQgIT0gKHVuc2lnbmVkKS0xKTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2Fs
bGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZU9m
ZnNldCBpcyBzZXQuCi0KLSAgICBtX2ptcFRhYmxlLmFwcGVuZChKdW1wVGFibGUoanVtcCwgbV9i
eXRlY29kZU9mZnNldCArIHJlbGF0aXZlT2Zmc2V0KSk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9p
ZCBKSVQ6OmVtaXRKdW1wU2xvd1RvSG90KEp1bXAganVtcCwgaW50IHJlbGF0aXZlT2Zmc2V0KQot
ewotICAgIEFTU0VSVChtX2J5dGVjb2RlT2Zmc2V0ICE9ICh1bnNpZ25lZCktMSk7IC8vIFRoaXMg
bWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0
aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVPZmZzZXQgaXMgc2V0LgotCi0gICAganVtcC5saW5rVG8o
bV9sYWJlbHNbbV9ieXRlY29kZU9mZnNldCArIHJlbGF0aXZlT2Zmc2V0XSwgdGhpcyk7Ci19Ci0K
LUFMV0FZU19JTkxJTkUgSklUOjpKdW1wIEpJVDo6ZW1pdEp1bXBJZk5vdE9iamVjdChSZWdpc3Rl
cklEIHN0cnVjdHVyZVJlZykKLXsKLSAgICByZXR1cm4gYnJhbmNoOChCZWxvdywgQWRkcmVzcyhz
dHJ1Y3R1cmVSZWcsIFN0cnVjdHVyZTo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1t
MzIoT2JqZWN0VHlwZSkpOwotfQotCi1BTFdBWVNfSU5MSU5FIEpJVDo6SnVtcCBKSVQ6OmVtaXRK
dW1wSWZOb3RUeXBlKFJlZ2lzdGVySUQgYmFzZVJlZywgUmVnaXN0ZXJJRCBzY3JhdGNoUmVnLCBK
U1R5cGUgdHlwZSkKLXsKLSAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZVJlZywgSlNDZWxsOjpzdHJ1
Y3R1cmVPZmZzZXQoKSksIHNjcmF0Y2hSZWcpOwotICAgIHJldHVybiBicmFuY2g4KE5vdEVxdWFs
LCBBZGRyZXNzKHNjcmF0Y2hSZWcsIFN0cnVjdHVyZTo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBU
cnVzdGVkSW1tMzIodHlwZSkpOwotfQotCi0jaWYgRU5BQkxFKFNBTVBMSU5HX0ZMQUdTKQotQUxX
QVlTX0lOTElORSB2b2lkIEpJVDo6c2V0U2FtcGxpbmdGbGFnKGludDMyX3QgZmxhZykKLXsKLSAg
ICBBU1NFUlQoZmxhZyA+PSAxKTsKLSAgICBBU1NFUlQoZmxhZyA8PSAzMik7Ci0gICAgb3IzMihU
cnVzdGVkSW1tMzIoMXUgPDwgKGZsYWcgLSAxKSksIEFic29sdXRlQWRkcmVzcyhTYW1wbGluZ0Zs
YWdzOjphZGRyZXNzT2ZGbGFncygpKSk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmNs
ZWFyU2FtcGxpbmdGbGFnKGludDMyX3QgZmxhZykKLXsKLSAgICBBU1NFUlQoZmxhZyA+PSAxKTsK
LSAgICBBU1NFUlQoZmxhZyA8PSAzMik7Ci0gICAgYW5kMzIoVHJ1c3RlZEltbTMyKH4oMXUgPDwg
KGZsYWcgLSAxKSkpLCBBYnNvbHV0ZUFkZHJlc3MoU2FtcGxpbmdGbGFnczo6YWRkcmVzc09mRmxh
Z3MoKSkpOwotfQotI2VuZGlmCi0KLSNpZiBFTkFCTEUoU0FNUExJTkdfQ09VTlRFUlMpCi1BTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjplbWl0Q291bnQoQWJzdHJhY3RTYW1wbGluZ0NvdW50ZXImIGNv
dW50ZXIsIGludDMyX3QgY291bnQpCi17Ci0gICAgYWRkNjQoVHJ1c3RlZEltbTMyKGNvdW50KSwg
QWJzb2x1dGVBZGRyZXNzKGNvdW50ZXIuYWRkcmVzc09mQ291bnRlcigpKSk7Ci19Ci0jZW5kaWYK
LQotI2lmIEVOQUJMRShPUENPREVfU0FNUExJTkcpCi0jaWYgQ1BVKFg4Nl82NCkKLUFMV0FZU19J
TkxJTkUgdm9pZCBKSVQ6OnNhbXBsZUluc3RydWN0aW9uKEluc3RydWN0aW9uKiBpbnN0cnVjdGlv
biwgYm9vbCBpbkhvc3RGdW5jdGlvbikKLXsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9pbnRl
cnByZXRlci0+c2FtcGxlcigpLT5zYW1wbGVTbG90KCkpLCBYODZSZWdpc3RlcnM6OmVjeCk7Ci0g
ICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihtX2ludGVycHJldGVyLT5zYW1wbGVyKCktPmVuY29k
ZVNhbXBsZShpbnN0cnVjdGlvbiwgaW5Ib3N0RnVuY3Rpb24pKSwgWDg2UmVnaXN0ZXJzOjplY3gp
OwotfQotI2Vsc2UKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnNhbXBsZUluc3RydWN0aW9uKElu
c3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgYm9vbCBpbkhvc3RGdW5jdGlvbikKLXsKLSAgICBzdG9y
ZVB0cihUcnVzdGVkSW1tUHRyKG1faW50ZXJwcmV0ZXItPnNhbXBsZXIoKS0+ZW5jb2RlU2FtcGxl
KGluc3RydWN0aW9uLCBpbkhvc3RGdW5jdGlvbikpLCBtX2ludGVycHJldGVyLT5zYW1wbGVyKCkt
PnNhbXBsZVNsb3QoKSk7Ci19Ci0jZW5kaWYKLSNlbmRpZgotCi0jaWYgRU5BQkxFKENPREVCTE9D
S19TQU1QTElORykKLSNpZiBDUFUoWDg2XzY0KQotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6c2Ft
cGxlQ29kZUJsb2NrKENvZGVCbG9jayogY29kZUJsb2NrKQotewotICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihtX2ludGVycHJldGVyLT5zYW1wbGVyKCktPmNvZGVCbG9ja1Nsb3QoKSksIFg4NlJlZ2lz
dGVyczo6ZWN4KTsKLSAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKGNvZGVCbG9jayksIFg4NlJl
Z2lzdGVyczo6ZWN4KTsKLX0KLSNlbHNlCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpzYW1wbGVD
b2RlQmxvY2soQ29kZUJsb2NrKiBjb2RlQmxvY2spCi17Ci0gICAgc3RvcmVQdHIoVHJ1c3RlZElt
bVB0cihjb2RlQmxvY2spLCBtX2ludGVycHJldGVyLT5zYW1wbGVyKCktPmNvZGVCbG9ja1Nsb3Qo
KSk7Ci19Ci0jZW5kaWYKLSNlbmRpZgotCi1BTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJh
bmRDb25zdGFudEltbWVkaWF0ZUNoYXIodW5zaWduZWQgc3JjKQotewotICAgIHJldHVybiBtX2Nv
ZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoc3JjKSAmJiBnZXRDb25zdGFudE9wZXJh
bmQoc3JjKS5pc1N0cmluZygpICYmIGFzU3RyaW5nKGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFz
Q2VsbCgpKS0+bGVuZ3RoKCkgPT0gMTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIENsYXNzVHlw
ZSwgTWFya2VkQmxvY2s6OkRlc3RydWN0b3JUeXBlIGRlc3RydWN0b3JUeXBlLCB0eXBlbmFtZSBT
dHJ1Y3R1cmVUeXBlPiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBbGxvY2F0ZUJhc2ljSlNPYmplY3Qo
U3RydWN0dXJlVHlwZSBzdHJ1Y3R1cmUsIFJlZ2lzdGVySUQgcmVzdWx0LCBSZWdpc3RlcklEIHN0
b3JhZ2VQdHIpCi17Ci0gICAgc2l6ZV90IHNpemUgPSBDbGFzc1R5cGU6OmFsbG9jYXRpb25TaXpl
KElOTElORV9TVE9SQUdFX0NBUEFDSVRZKTsKLSAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRv
ciA9IDA7Ci0gICAgaWYgKGRlc3RydWN0b3JUeXBlID09IE1hcmtlZEJsb2NrOjpOb3JtYWwpCi0g
ICAgICAgIGFsbG9jYXRvciA9ICZtX2dsb2JhbERhdGEtPmhlYXAuYWxsb2NhdG9yRm9yT2JqZWN0
V2l0aE5vcm1hbERlc3RydWN0b3Ioc2l6ZSk7Ci0gICAgZWxzZSBpZiAoZGVzdHJ1Y3RvclR5cGUg
PT0gTWFya2VkQmxvY2s6OkltbW9ydGFsU3RydWN0dXJlKQotICAgICAgICBhbGxvY2F0b3IgPSAm
bV9nbG9iYWxEYXRhLT5oZWFwLmFsbG9jYXRvckZvck9iamVjdFdpdGhJbW1vcnRhbFN0cnVjdHVy
ZURlc3RydWN0b3Ioc2l6ZSk7Ci0gICAgZWxzZQotICAgICAgICBhbGxvY2F0b3IgPSAmbV9nbG9i
YWxEYXRhLT5oZWFwLmFsbG9jYXRvckZvck9iamVjdFdpdGhvdXREZXN0cnVjdG9yKHNpemUpOwot
ICAgIGxvYWRQdHIoJmFsbG9jYXRvci0+bV9mcmVlTGlzdC5oZWFkLCByZXN1bHQpOwotICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgcmVzdWx0KSk7Ci0KLSAgICAvLyByZW1vdmUg
dGhlIG9iamVjdCBmcm9tIHRoZSBmcmVlIGxpc3QKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0
KSwgc3RvcmFnZVB0cik7Ci0gICAgc3RvcmVQdHIoc3RvcmFnZVB0ciwgJmFsbG9jYXRvci0+bV9m
cmVlTGlzdC5oZWFkKTsKLQotICAgIC8vIGluaXRpYWxpemUgdGhlIG9iamVjdCdzIHN0cnVjdHVy
ZQotICAgIHN0b3JlUHRyKHN0cnVjdHVyZSwgQWRkcmVzcyhyZXN1bHQsIEpTQ2VsbDo6c3RydWN0
dXJlT2Zmc2V0KCkpKTsKLQotICAgIC8vIGluaXRpYWxpemUgdGhlIG9iamVjdCdzIHByb3BlcnR5
IHN0b3JhZ2UgcG9pbnRlcgotICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoMCksIEFkZHJlc3Mo
cmVzdWx0LCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpKTsKLX0KLQotdGVtcGxhdGUgPHR5
cGVuYW1lIFQ+IGlubGluZSB2b2lkIEpJVDo6ZW1pdEFsbG9jYXRlSlNGaW5hbE9iamVjdChUIHN0
cnVjdHVyZSwgUmVnaXN0ZXJJRCByZXN1bHQsIFJlZ2lzdGVySUQgc2NyYXRjaCkKLXsKLSAgICBl
bWl0QWxsb2NhdGVCYXNpY0pTT2JqZWN0PEpTRmluYWxPYmplY3QsIE1hcmtlZEJsb2NrOjpOb25l
LCBUPihzdHJ1Y3R1cmUsIHJlc3VsdCwgc2NyYXRjaCk7Ci19Ci0KLSNpZiBFTkFCTEUoVkFMVUVf
UFJPRklMRVIpCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQ
cm9maWxlKiB2YWx1ZVByb2ZpbGUpCi17Ci0gICAgQVNTRVJUKHNob3VsZEVtaXRQcm9maWxpbmco
KSk7Ci0gICAgQVNTRVJUKHZhbHVlUHJvZmlsZSk7Ci0KLSAgICBjb25zdCBSZWdpc3RlcklEIHZh
bHVlID0gcmVnVDA7Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICBjb25zdCBSZWdpc3RlcklE
IHZhbHVlVGFnID0gcmVnVDE7Ci0jZW5kaWYKLSAgICBjb25zdCBSZWdpc3RlcklEIHNjcmF0Y2gg
PSByZWdUMzsKLSAgICAKLSAgICBpZiAoVmFsdWVQcm9maWxlOjpudW1iZXJPZkJ1Y2tldHMgPT0g
MSkgewotICAgICAgICAvLyBXZSdyZSBpbiBhIHNpbXBsZSBjb25maWd1cmF0aW9uOiBvbmx5IG9u
ZSBidWNrZXQsIHNvIHdlIGNhbiBqdXN0IGRvIGEgZGlyZWN0Ci0gICAgICAgIC8vIHN0b3JlLgot
I2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHN0b3JlNjQodmFsdWUsIHZhbHVlUHJvZmlsZS0+
bV9idWNrZXRzKTsKLSNlbHNlCi0gICAgICAgIEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqIGRlc2Ny
aXB0b3IgPSBiaXR3aXNlX2Nhc3Q8RW5jb2RlZFZhbHVlRGVzY3JpcHRvcio+KHZhbHVlUHJvZmls
ZS0+bV9idWNrZXRzKTsKLSAgICAgICAgc3RvcmUzMih2YWx1ZSwgJmRlc2NyaXB0b3ItPmFzQml0
cy5wYXlsb2FkKTsKLSAgICAgICAgc3RvcmUzMih2YWx1ZVRhZywgJmRlc2NyaXB0b3ItPmFzQml0
cy50YWcpOwotI2VuZGlmCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgaWYgKG1f
cmFuZG9tR2VuZXJhdG9yLmdldFVpbnQzMigpICYgMSkKLSAgICAgICAgYWRkMzIoVHJ1c3RlZElt
bTMyKDEpLCBidWNrZXRDb3VudGVyUmVnaXN0ZXIpOwotICAgIGVsc2UKLSAgICAgICAgYWRkMzIo
VHJ1c3RlZEltbTMyKDMpLCBidWNrZXRDb3VudGVyUmVnaXN0ZXIpOwotICAgIGFuZDMyKFRydXN0
ZWRJbW0zMihWYWx1ZVByb2ZpbGU6OmJ1Y2tldEluZGV4TWFzayksIGJ1Y2tldENvdW50ZXJSZWdp
c3Rlcik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKHZhbHVlUHJvZmlsZS0+bV9idWNrZXRzKSwg
c2NyYXRjaCk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBzdG9yZTY0KHZhbHVlLCBCYXNlSW5k
ZXgoc2NyYXRjaCwgYnVja2V0Q291bnRlclJlZ2lzdGVyLCBUaW1lc0VpZ2h0KSk7Ci0jZWxpZiBV
U0UoSlNWQUxVRTMyXzY0KQotICAgIHN0b3JlMzIodmFsdWUsIEJhc2VJbmRleChzY3JhdGNoLCBi
dWNrZXRDb3VudGVyUmVnaXN0ZXIsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVl
LCB1LmFzQml0cy5wYXlsb2FkKSkpOwotICAgIHN0b3JlMzIodmFsdWVUYWcsIEJhc2VJbmRleChz
Y3JhdGNoLCBidWNrZXRDb3VudGVyUmVnaXN0ZXIsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRP
RihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSk7Ci0jZW5kaWYKLX0KLQotaW5saW5lIHZvaWQgSklU
OjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQotewotICAg
IGlmICghc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShtX2NvZGVCbG9jay0+dmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVPZmZz
ZXQoYnl0ZWNvZGVPZmZzZXQpKTsKLX0KLQotaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKCkKLXsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1fYnl0ZWNvZGVPZmZz
ZXQpOwotfQotI2VuZGlmIC8vIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKLQotaW5saW5lIHZvaWQg
SklUOjplbWl0QXJyYXlQcm9maWxpbmdTaXRlKFJlZ2lzdGVySUQgc3RydWN0dXJlQW5kSW5kZXhp
bmdUeXBlLCBSZWdpc3RlcklEIHNjcmF0Y2gsIEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlKQot
ewotICAgIFVOVVNFRF9QQVJBTShzY3JhdGNoKTsgLy8gV2UgaGFkIGZvdW5kIHRoaXMgc2NyYXRj
aCByZWdpc3RlciB1c2VmdWwgaGVyZSBiZWZvcmUsIHNvIEkgd2lsbCBrZWVwIGl0IGZvciBub3cu
Ci0gICAgCi0gICAgUmVnaXN0ZXJJRCBzdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmVBbmRJbmRleGluZ1R5
cGU7Ci0gICAgUmVnaXN0ZXJJRCBpbmRleGluZ1R5cGUgPSBzdHJ1Y3R1cmVBbmRJbmRleGluZ1R5
cGU7Ci0gICAgCi0gICAgaWYgKGNhbkJlT3B0aW1pemVkKCkpCi0gICAgICAgIHN0b3JlUHRyKHN0
cnVjdHVyZSwgYXJyYXlQcm9maWxlLT5hZGRyZXNzT2ZMYXN0U2VlblN0cnVjdHVyZSgpKTsKLQot
ICAgIGxvYWQ4KEFkZHJlc3Moc3RydWN0dXJlLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNl
dCgpKSwgaW5kZXhpbmdUeXBlKTsKLX0KLQotaW5saW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9m
aWxpbmdTaXRlRm9yQnl0ZWNvZGVJbmRleChSZWdpc3RlcklEIHN0cnVjdHVyZUFuZEluZGV4aW5n
VHlwZSwgUmVnaXN0ZXJJRCBzY3JhdGNoLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQotewotI2lm
IEVOQUJMRShWQUxVRV9QUk9GSUxFUikKLSAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlKHN0cnVj
dHVyZUFuZEluZGV4aW5nVHlwZSwgc2NyYXRjaCwgbV9jb2RlQmxvY2stPmdldE9yQWRkQXJyYXlQ
cm9maWxlKGJ5dGVjb2RlSW5kZXgpKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGJ5dGVjb2Rl
SW5kZXgpOwotICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGUoc3RydWN0dXJlQW5kSW5kZXhpbmdU
eXBlLCBzY3JhdGNoLCAwKTsKLSNlbmRpZgotfQotCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRBcnJh
eVByb2ZpbGVTdG9yZVRvSG9sZVNwZWNpYWxDYXNlKEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxl
KQotewotI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikgICAgCi0gICAgc3RvcmU4KFRydXN0ZWRJ
bW0zMigxKSwgYXJyYXlQcm9maWxlLT5hZGRyZXNzT2ZNYXlTdG9yZVRvSG9sZSgpKTsKLSNlbHNl
Ci0gICAgVU5VU0VEX1BBUkFNKGFycmF5UHJvZmlsZSk7Ci0jZW5kaWYKLX0KLQotc3RhdGljIGlu
bGluZSBib29sIGFycmF5UHJvZmlsZVNhdyhBcnJheU1vZGVzIGFycmF5TW9kZXMsIEluZGV4aW5n
VHlwZSBjYXBhYmlsaXR5KQotewotI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKLSAgICByZXR1
cm4gYXJyYXlNb2Rlc0luY2x1ZGUoYXJyYXlNb2RlcywgY2FwYWJpbGl0eSk7Ci0jZWxzZQotICAg
IFVOVVNFRF9QQVJBTShhcnJheU1vZGVzKTsKLSAgICBVTlVTRURfUEFSQU0oY2FwYWJpbGl0eSk7
Ci0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi19Ci0KLWlubGluZSBKSVRBcnJheU1vZGUgSklU
OjpjaG9vc2VBcnJheU1vZGUoQXJyYXlQcm9maWxlKiBwcm9maWxlKQotewotICAgIHByb2ZpbGUt
PmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihtX2NvZGVCbG9jayk7Ci0gICAgQXJyYXlNb2RlcyBh
cnJheU1vZGVzID0gcHJvZmlsZS0+b2JzZXJ2ZWRBcnJheU1vZGVzKCk7Ci0gICAgaWYgKGFycmF5
UHJvZmlsZVNhdyhhcnJheU1vZGVzLCBEb3VibGVTaGFwZSkpCi0gICAgICAgIHJldHVybiBKSVRE
b3VibGU7Ci0gICAgaWYgKGFycmF5UHJvZmlsZVNhdyhhcnJheU1vZGVzLCBJbnQzMlNoYXBlKSkK
LSAgICAgICAgcmV0dXJuIEpJVEludDMyOwotICAgIGlmIChhcnJheVByb2ZpbGVTYXcoYXJyYXlN
b2RlcywgQXJyYXlTdG9yYWdlU2hhcGUpKQotICAgICAgICByZXR1cm4gSklUQXJyYXlTdG9yYWdl
OwotICAgIHJldHVybiBKSVRDb250aWd1b3VzOwotfQotCi0jaWYgVVNFKEpTVkFMVUUzMl82NCkK
LQotaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZFRhZyhpbnQgaW5kZXgsIFJlZ2lzdGVySUQgdGFn
KQotewotICAgIFJlZ2lzdGVySUQgbWFwcGVkVGFnOwotICAgIGlmIChnZXRNYXBwZWRUYWcoaW5k
ZXgsIG1hcHBlZFRhZykpIHsKLSAgICAgICAgbW92ZShtYXBwZWRUYWcsIHRhZyk7Ci0gICAgICAg
IHVubWFwKHRhZyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAobV9jb2RlQmxv
Y2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGluZGV4KSkgewotICAgICAgICBtb3ZlKEltbTMy
KGdldENvbnN0YW50T3BlcmFuZChpbmRleCkudGFnKCkpLCB0YWcpOwotICAgICAgICB1bm1hcCh0
YWcpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbG9hZDMyKHRhZ0ZvcihpbmRleCks
IHRhZyk7Ci0gICAgdW5tYXAodGFnKTsKLX0KLQotaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZFBh
eWxvYWQoaW50IGluZGV4LCBSZWdpc3RlcklEIHBheWxvYWQpCi17Ci0gICAgUmVnaXN0ZXJJRCBt
YXBwZWRQYXlsb2FkOwotICAgIGlmIChnZXRNYXBwZWRQYXlsb2FkKGluZGV4LCBtYXBwZWRQYXls
b2FkKSkgewotICAgICAgICBtb3ZlKG1hcHBlZFBheWxvYWQsIHBheWxvYWQpOwotICAgICAgICB1
bm1hcChwYXlsb2FkKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChtX2NvZGVC
bG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW5kZXgpKSB7Ci0gICAgICAgIG1vdmUoSW1t
MzIoZ2V0Q29uc3RhbnRPcGVyYW5kKGluZGV4KS5wYXlsb2FkKCkpLCBwYXlsb2FkKTsKLSAgICAg
ICAgdW5tYXAocGF5bG9hZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBsb2FkMzIo
cGF5bG9hZEZvcihpbmRleCksIHBheWxvYWQpOwotICAgIHVubWFwKHBheWxvYWQpOwotfQotCi1p
bmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkKGNvbnN0IEpTVmFsdWUmIHYsIFJlZ2lzdGVySUQgdGFn
LCBSZWdpc3RlcklEIHBheWxvYWQpCi17Ci0gICAgbW92ZShJbW0zMih2LnBheWxvYWQoKSksIHBh
eWxvYWQpOwotICAgIG1vdmUoSW1tMzIodi50YWcoKSksIHRhZyk7Ci19Ci0KLWlubGluZSB2b2lk
IEpJVDo6ZW1pdExvYWQoaW50IGluZGV4LCBSZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJRCBwYXls
b2FkLCBSZWdpc3RlcklEIGJhc2UpCi17Ci0gICAgQVNTRVJUKHRhZyAhPSBwYXlsb2FkKTsKLQot
ICAgIGlmIChiYXNlID09IGNhbGxGcmFtZVJlZ2lzdGVyKSB7Ci0gICAgICAgIEFTU0VSVChwYXls
b2FkICE9IGJhc2UpOwotICAgICAgICBlbWl0TG9hZFBheWxvYWQoaW5kZXgsIHBheWxvYWQpOwot
ICAgICAgICBlbWl0TG9hZFRhZyhpbmRleCwgdGFnKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGlmIChwYXlsb2FkID09IGJhc2UpIHsgLy8gYXZvaWQgc3RvbXBpbmcgYmFzZQotICAg
ICAgICBsb2FkMzIodGFnRm9yKGluZGV4LCBiYXNlKSwgdGFnKTsKLSAgICAgICAgbG9hZDMyKHBh
eWxvYWRGb3IoaW5kZXgsIGJhc2UpLCBwYXlsb2FkKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGxvYWQzMihwYXlsb2FkRm9yKGluZGV4LCBiYXNlKSwgcGF5bG9hZCk7Ci0gICAgbG9h
ZDMyKHRhZ0ZvcihpbmRleCwgYmFzZSksIHRhZyk7Ci19Ci0KLWlubGluZSB2b2lkIEpJVDo6ZW1p
dExvYWQyKGludCBpbmRleDEsIFJlZ2lzdGVySUQgdGFnMSwgUmVnaXN0ZXJJRCBwYXlsb2FkMSwg
aW50IGluZGV4MiwgUmVnaXN0ZXJJRCB0YWcyLCBSZWdpc3RlcklEIHBheWxvYWQyKQotewotICAg
IGlmIChpc01hcHBlZChpbmRleDEpKSB7Ci0gICAgICAgIGVtaXRMb2FkKGluZGV4MSwgdGFnMSwg
cGF5bG9hZDEpOwotICAgICAgICBlbWl0TG9hZChpbmRleDIsIHRhZzIsIHBheWxvYWQyKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBlbWl0TG9hZChpbmRleDIsIHRhZzIsIHBheWxvYWQy
KTsKLSAgICBlbWl0TG9hZChpbmRleDEsIHRhZzEsIHBheWxvYWQxKTsKLX0KLQotaW5saW5lIHZv
aWQgSklUOjplbWl0TG9hZERvdWJsZShpbnQgaW5kZXgsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKLXsK
LSAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGluZGV4KSkgewot
ICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGluQ29uc3RhbnRQb29sID0gbV9jb2RlQmxv
Y2stPmNvbnN0YW50UmVnaXN0ZXIoaW5kZXgpOwotICAgICAgICBsb2FkRG91YmxlKCZpbkNvbnN0
YW50UG9vbCwgdmFsdWUpOwotICAgIH0gZWxzZQotICAgICAgICBsb2FkRG91YmxlKGFkZHJlc3NG
b3IoaW5kZXgpLCB2YWx1ZSk7Ci19Ci0KLWlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWRJbnQzMlRv
RG91YmxlKGludCBpbmRleCwgRlBSZWdpc3RlcklEIHZhbHVlKQotewotICAgIGlmIChtX2NvZGVC
bG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW5kZXgpKSB7Ci0gICAgICAgIFdyaXRlQmFy
cmllcjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wgPSBtX2NvZGVCbG9jay0+Y29uc3RhbnRSZWdp
c3RlcihpbmRleCk7Ci0gICAgICAgIGNoYXIqIGJ5dGVQb2ludGVyID0gcmVpbnRlcnByZXRfY2Fz
dDxjaGFyKj4oJmluQ29uc3RhbnRQb29sKTsKLSAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUo
QWJzb2x1dGVBZGRyZXNzKGJ5dGVQb2ludGVyICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUu
YXNCaXRzLnBheWxvYWQpKSwgdmFsdWUpOwotICAgIH0gZWxzZQotICAgICAgICBjb252ZXJ0SW50
MzJUb0RvdWJsZShwYXlsb2FkRm9yKGluZGV4KSwgdmFsdWUpOwotfQotCi1pbmxpbmUgdm9pZCBK
SVQ6OmVtaXRTdG9yZShpbnQgaW5kZXgsIFJlZ2lzdGVySUQgdGFnLCBSZWdpc3RlcklEIHBheWxv
YWQsIFJlZ2lzdGVySUQgYmFzZSkKLXsKLSAgICBzdG9yZTMyKHBheWxvYWQsIHBheWxvYWRGb3Io
aW5kZXgsIGJhc2UpKTsKLSAgICBzdG9yZTMyKHRhZywgdGFnRm9yKGluZGV4LCBiYXNlKSk7Ci19
Ci0KLWlubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlSW50MzIoaW50IGluZGV4LCBSZWdpc3RlcklE
IHBheWxvYWQsIGJvb2wgaW5kZXhJc0ludDMyKQotewotICAgIHN0b3JlMzIocGF5bG9hZCwgcGF5
bG9hZEZvcihpbmRleCwgY2FsbEZyYW1lUmVnaXN0ZXIpKTsKLSAgICBpZiAoIWluZGV4SXNJbnQz
MikKLSAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCB0YWdG
b3IoaW5kZXgsIGNhbGxGcmFtZVJlZ2lzdGVyKSk7Ci19Ci0KLWlubGluZSB2b2lkIEpJVDo6ZW1p
dFN0b3JlQW5kTWFwSW50MzIoaW50IGluZGV4LCBSZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJRCBw
YXlsb2FkLCBib29sIGluZGV4SXNJbnQzMiwgc2l6ZV90IG9wY29kZUxlbmd0aCkKLXsKLSAgICBl
bWl0U3RvcmVJbnQzMihpbmRleCwgcGF5bG9hZCwgaW5kZXhJc0ludDMyKTsKLSAgICBtYXAobV9i
eXRlY29kZU9mZnNldCArIG9wY29kZUxlbmd0aCwgaW5kZXgsIHRhZywgcGF5bG9hZCk7Ci19Ci0K
LWlubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlSW50MzIoaW50IGluZGV4LCBUcnVzdGVkSW1tMzIg
cGF5bG9hZCwgYm9vbCBpbmRleElzSW50MzIpCi17Ci0gICAgc3RvcmUzMihwYXlsb2FkLCBwYXls
b2FkRm9yKGluZGV4LCBjYWxsRnJhbWVSZWdpc3RlcikpOwotICAgIGlmICghaW5kZXhJc0ludDMy
KQotICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHRhZ0Zv
cihpbmRleCwgY2FsbEZyYW1lUmVnaXN0ZXIpKTsKLX0KLQotaW5saW5lIHZvaWQgSklUOjplbWl0
U3RvcmVDZWxsKGludCBpbmRleCwgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXNDZWxs
KQotewotICAgIHN0b3JlMzIocGF5bG9hZCwgcGF5bG9hZEZvcihpbmRleCwgY2FsbEZyYW1lUmVn
aXN0ZXIpKTsKLSAgICBpZiAoIWluZGV4SXNDZWxsKQotICAgICAgICBzdG9yZTMyKFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgdGFnRm9yKGluZGV4LCBjYWxsRnJhbWVSZWdpc3Rlcikp
OwotfQotCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZUJvb2woaW50IGluZGV4LCBSZWdpc3Rl
cklEIHBheWxvYWQsIGJvb2wgaW5kZXhJc0Jvb2wpCi17Ci0gICAgc3RvcmUzMihwYXlsb2FkLCBw
YXlsb2FkRm9yKGluZGV4LCBjYWxsRnJhbWVSZWdpc3RlcikpOwotICAgIGlmICghaW5kZXhJc0Jv
b2wpCi0gICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJvb2xlYW5UYWcpLCB0
YWdGb3IoaW5kZXgsIGNhbGxGcmFtZVJlZ2lzdGVyKSk7Ci19Ci0KLWlubGluZSB2b2lkIEpJVDo6
ZW1pdFN0b3JlRG91YmxlKGludCBpbmRleCwgRlBSZWdpc3RlcklEIHZhbHVlKQotewotICAgIHN0
b3JlRG91YmxlKHZhbHVlLCBhZGRyZXNzRm9yKGluZGV4KSk7Ci19Ci0KLWlubGluZSB2b2lkIEpJ
VDo6ZW1pdFN0b3JlKGludCBpbmRleCwgY29uc3QgSlNWYWx1ZSBjb25zdGFudCwgUmVnaXN0ZXJJ
RCBiYXNlKQotewotICAgIHN0b3JlMzIoSW1tMzIoY29uc3RhbnQucGF5bG9hZCgpKSwgcGF5bG9h
ZEZvcihpbmRleCwgYmFzZSkpOwotICAgIHN0b3JlMzIoSW1tMzIoY29uc3RhbnQudGFnKCkpLCB0
YWdGb3IoaW5kZXgsIGJhc2UpKTsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdElu
aXRSZWdpc3Rlcih1bnNpZ25lZCBkc3QpCi17Ci0gICAgZW1pdFN0b3JlKGRzdCwganNVbmRlZmlu
ZWQoKSk7Ci19Ci0KLWlubGluZSBib29sIEpJVDo6aXNMYWJlbGVkKHVuc2lnbmVkIGJ5dGVjb2Rl
T2Zmc2V0KQotewotICAgIGZvciAoc2l6ZV90IG51bWJlck9mSnVtcFRhcmdldHMgPSBtX2NvZGVC
bG9jay0+bnVtYmVyT2ZKdW1wVGFyZ2V0cygpOyBtX2p1bXBUYXJnZXRJbmRleCAhPSBudW1iZXJP
Zkp1bXBUYXJnZXRzOyArK21fanVtcFRhcmdldEluZGV4KSB7Ci0gICAgICAgIHVuc2lnbmVkIGp1
bXBUYXJnZXQgPSBtX2NvZGVCbG9jay0+anVtcFRhcmdldChtX2p1bXBUYXJnZXRJbmRleCk7Ci0g
ICAgICAgIGlmIChqdW1wVGFyZ2V0ID09IGJ5dGVjb2RlT2Zmc2V0KQotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIGlmIChqdW1wVGFyZ2V0ID4gYnl0ZWNvZGVPZmZzZXQpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotaW5s
aW5lIHZvaWQgSklUOjptYXAodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIGludCB2aXJ0dWFsUmVn
aXN0ZXJJbmRleCwgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCkKLXsKLSAgICBp
ZiAoaXNMYWJlbGVkKGJ5dGVjb2RlT2Zmc2V0KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9t
YXBwZWRCeXRlY29kZU9mZnNldCA9IGJ5dGVjb2RlT2Zmc2V0OwotICAgIG1fbWFwcGVkVmlydHVh
bFJlZ2lzdGVySW5kZXggPSB2aXJ0dWFsUmVnaXN0ZXJJbmRleDsKLSAgICBtX21hcHBlZFRhZyA9
IHRhZzsKLSAgICBtX21hcHBlZFBheWxvYWQgPSBwYXlsb2FkOwotICAgIAotICAgIEFTU0VSVCgh
Y2FuQmVPcHRpbWl6ZWQoKSB8fCBtX21hcHBlZFBheWxvYWQgPT0gcmVnVDApOwotICAgIEFTU0VS
VCghY2FuQmVPcHRpbWl6ZWQoKSB8fCBtX21hcHBlZFRhZyA9PSByZWdUMSk7Ci19Ci0KLWlubGlu
ZSB2b2lkIEpJVDo6dW5tYXAoUmVnaXN0ZXJJRCByZWdpc3RlcklEKQotewotICAgIGlmIChtX21h
cHBlZFRhZyA9PSByZWdpc3RlcklEKQotICAgICAgICBtX21hcHBlZFRhZyA9IChSZWdpc3RlcklE
KS0xOwotICAgIGVsc2UgaWYgKG1fbWFwcGVkUGF5bG9hZCA9PSByZWdpc3RlcklEKQotICAgICAg
ICBtX21hcHBlZFBheWxvYWQgPSAoUmVnaXN0ZXJJRCktMTsKLX0KLQotaW5saW5lIHZvaWQgSklU
Ojp1bm1hcCgpCi17Ci0gICAgbV9tYXBwZWRCeXRlY29kZU9mZnNldCA9ICh1bnNpZ25lZCktMTsK
LSAgICBtX21hcHBlZFZpcnR1YWxSZWdpc3RlckluZGV4ID0gSlNTdGFjazo6UmV0dXJuUEM7Ci0g
ICAgbV9tYXBwZWRUYWcgPSAoUmVnaXN0ZXJJRCktMTsKLSAgICBtX21hcHBlZFBheWxvYWQgPSAo
UmVnaXN0ZXJJRCktMTsKLX0KLQotaW5saW5lIGJvb2wgSklUOjppc01hcHBlZChpbnQgdmlydHVh
bFJlZ2lzdGVySW5kZXgpCi17Ci0gICAgaWYgKG1fbWFwcGVkQnl0ZWNvZGVPZmZzZXQgIT0gbV9i
eXRlY29kZU9mZnNldCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChtX21hcHBlZFZp
cnR1YWxSZWdpc3RlckluZGV4ICE9IHZpcnR1YWxSZWdpc3RlckluZGV4KQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWlubGluZSBib29sIEpJVDo6Z2V0TWFw
cGVkUGF5bG9hZChpbnQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIFJlZ2lzdGVySUQmIHBheWxvYWQp
Ci17Ci0gICAgaWYgKG1fbWFwcGVkQnl0ZWNvZGVPZmZzZXQgIT0gbV9ieXRlY29kZU9mZnNldCkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChtX21hcHBlZFZpcnR1YWxSZWdpc3Rlcklu
ZGV4ICE9IHZpcnR1YWxSZWdpc3RlckluZGV4KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
aWYgKG1fbWFwcGVkUGF5bG9hZCA9PSAoUmVnaXN0ZXJJRCktMSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIHBheWxvYWQgPSBtX21hcHBlZFBheWxvYWQ7Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLWlubGluZSBib29sIEpJVDo6Z2V0TWFwcGVkVGFnKGludCB2aXJ0dWFsUmVnaXN0ZXJJbmRl
eCwgUmVnaXN0ZXJJRCYgdGFnKQotewotICAgIGlmIChtX21hcHBlZEJ5dGVjb2RlT2Zmc2V0ICE9
IG1fYnl0ZWNvZGVPZmZzZXQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAobV9tYXBw
ZWRWaXJ0dWFsUmVnaXN0ZXJJbmRleCAhPSB2aXJ0dWFsUmVnaXN0ZXJJbmRleCkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIGlmIChtX21hcHBlZFRhZyA9PSAoUmVnaXN0ZXJJRCktMSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHRhZyA9IG1fbWFwcGVkVGFnOwotICAgIHJldHVybiB0
cnVlOwotfQotCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChp
bnQgdmlydHVhbFJlZ2lzdGVySW5kZXgpCi17Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93
bk5vdEltbWVkaWF0ZSh2aXJ0dWFsUmVnaXN0ZXJJbmRleCkpIHsKLSAgICAgICAgaWYgKG1fY29k
ZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleCh2aXJ0dWFsUmVnaXN0ZXJJbmRleCkpCi0g
ICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBhZGRTbG93Q2FzZShlbWl0SnVtcElmTm90SlNDZWxsKHZpcnR1YWxSZWdpc3RlckluZGV4KSk7
Ci0gICAgfQotfQotCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChpbnQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIFJlZ2lzdGVySUQgdGFnKQotewotICAgIGlmICgh
bV9jb2RlQmxvY2stPmlzS25vd25Ob3RJbW1lZGlhdGUodmlydHVhbFJlZ2lzdGVySW5kZXgpKSB7
Ci0gICAgICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgodmlydHVh
bFJlZ2lzdGVySW5kZXgpKQotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHRhZywg
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKSk7Ci0gICAgfQotfQotCi1BTFdBWVNfSU5M
SU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudEltbWVkaWF0ZUludCh1bnNpZ25lZCBzcmMp
Ci17Ci0gICAgcmV0dXJuIG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChzcmMp
ICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKLX0KLQotQUxXQVlTX0lOTElO
RSBib29sIEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50SW1tZWRpYXRlSW50KHVuc2lnbmVkIG9wMSwg
dW5zaWduZWQgb3AyLCB1bnNpZ25lZCYgb3AsIGludDMyX3QmIGNvbnN0YW50KQotewotICAgIGlm
IChpc09wZXJhbmRDb25zdGFudEltbWVkaWF0ZUludChvcDEpKSB7Ci0gICAgICAgIGNvbnN0YW50
ID0gZ2V0Q29uc3RhbnRPcGVyYW5kKG9wMSkuYXNJbnQzMigpOwotICAgICAgICBvcCA9IG9wMjsK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKGlzT3BlcmFuZENvbnN0YW50
SW1tZWRpYXRlSW50KG9wMikpIHsKLSAgICAgICAgY29uc3RhbnQgPSBnZXRDb25zdGFudE9wZXJh
bmQob3AyKS5hc0ludDMyKCk7Ci0gICAgICAgIG9wID0gb3AxOwotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi0jZWxzZSAvLyBVU0UoSlNW
QUxVRTMyXzY0KQotCi0vKiBEZXByZWNhdGVkOiBQbGVhc2UgdXNlIEpJVFN0dWJDYWxsIGluc3Rl
YWQuICovCi0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRKSVRTdHViQXJnKHVuc2ln
bmVkIGFyZ3VtZW50TnVtYmVyLCBSZWdpc3RlcklEIGRzdCkKLXsKLSAgICB1bnNpZ25lZCBhcmd1
bWVudFN0YWNrT2Zmc2V0ID0gKGFyZ3VtZW50TnVtYmVyICogKHNpemVvZihKU1ZhbHVlKSAvIHNp
emVvZih2b2lkKikpKSArIEpJVFNUQUNLRlJBTUVfQVJHU19JTkRFWDsKLSAgICBwZWVrNjQoZHN0
LCBhcmd1bWVudFN0YWNrT2Zmc2V0KTsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6a2ls
bExhc3RSZXN1bHRSZWdpc3RlcigpCi17Ci0gICAgbV9sYXN0UmVzdWx0Qnl0ZWNvZGVSZWdpc3Rl
ciA9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCk7Ci19Ci0KLS8vIGdldCBhcmcgcHV0
cyBhbiBhcmcgZnJvbSB0aGUgU0YgcmVnaXN0ZXIgYXJyYXkgaW50byBhIGgvdyByZWdpc3Rlcgot
QUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnQgc3JjLCBS
ZWdpc3RlcklEIGRzdCkKLXsKLSAgICBBU1NFUlQobV9ieXRlY29kZU9mZnNldCAhPSAodW5zaWdu
ZWQpLTEpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9j
b2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlT2Zmc2V0IGlzIHNldC4KLQot
ICAgIC8vIFRPRE86IHdlIHdhbnQgdG8gcmV1c2UgdmFsdWVzIHRoYXQgYXJlIGFscmVhZHkgaW4g
cmVnaXN0ZXJzIGlmIHdlIGNhbiAtIGFkZCBhIHJlZ2lzdGVyIGFsbG9jYXRvciEKLSAgICBpZiAo
bV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHNyYykpIHsKLSAgICAgICAgSlNW
YWx1ZSB2YWx1ZSA9IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwotICAgICAgICBpZiAo
IXZhbHVlLmlzTnVtYmVyKCkpCi0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVl
OjplbmNvZGUodmFsdWUpKSwgZHN0KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbW92ZShJ
bW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUpKSwgZHN0KTsKLSAgICAgICAga2lsbExhc3RSZXN1
bHRSZWdpc3RlcigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKHNyYyA9PSBt
X2xhc3RSZXN1bHRCeXRlY29kZVJlZ2lzdGVyICYmIG1fY29kZUJsb2NrLT5pc1RlbXBvcmFyeVJl
Z2lzdGVySW5kZXgoc3JjKSAmJiAhYXRKdW1wVGFyZ2V0KCkpIHsKLSAgICAgICAgLy8gVGhlIGFy
Z3VtZW50IHdlIHdhbnQgaXMgYWxyZWFkeSBzdG9yZWQgaW4gZWF4Ci0gICAgICAgIGlmIChkc3Qg
IT0gY2FjaGVkUmVzdWx0UmVnaXN0ZXIpCi0gICAgICAgICAgICBtb3ZlKGNhY2hlZFJlc3VsdFJl
Z2lzdGVyLCBkc3QpOwotICAgICAgICBraWxsTGFzdFJlc3VsdFJlZ2lzdGVyKCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBsb2FkNjQoQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rlciwg
c3JjICogc2l6ZW9mKFJlZ2lzdGVyKSksIGRzdCk7Ci0gICAga2lsbExhc3RSZXN1bHRSZWdpc3Rl
cigpOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVy
cyhpbnQgc3JjMSwgUmVnaXN0ZXJJRCBkc3QxLCBpbnQgc3JjMiwgUmVnaXN0ZXJJRCBkc3QyKQot
ewotICAgIGlmIChzcmMyID09IG1fbGFzdFJlc3VsdEJ5dGVjb2RlUmVnaXN0ZXIpIHsKLSAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMyLCBkc3QyKTsKLSAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzcmMxLCBkc3QxKTsKLSAgICB9IGVsc2UgewotICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNyYzEsIGRzdDEpOwotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNyYzIsIGRzdDIpOwotICAgIH0KLX0KLQotQUxXQVlTX0lOTElORSBpbnQzMl90IEpJVDo6
Z2V0Q29uc3RhbnRPcGVyYW5kSW1tZWRpYXRlSW50KHVuc2lnbmVkIHNyYykKLXsKLSAgICByZXR1
cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNJbnQzMigpOwotfQotCi1BTFdBWVNfSU5MSU5F
IGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudEltbWVkaWF0ZUludCh1bnNpZ25lZCBzcmMpCi17
Ci0gICAgcmV0dXJuIG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChzcmMpICYm
IGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKLX0KLQotQUxXQVlTX0lOTElORSB2
b2lkIEpJVDo6ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcih1bnNpZ25lZCBkc3QsIFJlZ2lzdGVySUQg
ZnJvbSkKLXsKLSAgICBzdG9yZTY0KGZyb20sIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIGRz
dCAqIHNpemVvZihSZWdpc3RlcikpKTsKLSAgICBtX2xhc3RSZXN1bHRCeXRlY29kZVJlZ2lzdGVy
ID0gKGZyb20gPT0gY2FjaGVkUmVzdWx0UmVnaXN0ZXIpID8gc3RhdGljX2Nhc3Q8aW50Pihkc3Qp
IDogc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKTsKLX0KLQotQUxXQVlTX0lOTElORSB2
b2lkIEpJVDo6ZW1pdEluaXRSZWdpc3Rlcih1bnNpZ25lZCBkc3QpCi17Ci0gICAgc3RvcmU2NChU
cnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSwgQWRkcmVzcyhjYWxs
RnJhbWVSZWdpc3RlciwgZHN0ICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwotfQotCi1BTFdBWVNfSU5M
SU5FIEpJVDo6SnVtcCBKSVQ6OmVtaXRKdW1wSWZKU0NlbGwoUmVnaXN0ZXJJRCByZWcpCi17Ci0g
ICAgcmV0dXJuIGJyYW5jaFRlc3Q2NChaZXJvLCByZWcsIHRhZ01hc2tSZWdpc3Rlcik7Ci19Ci0K
LUFMV0FZU19JTkxJTkUgSklUOjpKdW1wIEpJVDo6ZW1pdEp1bXBJZkJvdGhKU0NlbGxzKFJlZ2lz
dGVySUQgcmVnMSwgUmVnaXN0ZXJJRCByZWcyLCBSZWdpc3RlcklEIHNjcmF0Y2gpCi17Ci0gICAg
bW92ZShyZWcxLCBzY3JhdGNoKTsKLSAgICBvcjY0KHJlZzIsIHNjcmF0Y2gpOwotICAgIHJldHVy
biBlbWl0SnVtcElmSlNDZWxsKHNjcmF0Y2gpOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklU
OjplbWl0SnVtcFNsb3dDYXNlSWZKU0NlbGwoUmVnaXN0ZXJJRCByZWcpCi17Ci0gICAgYWRkU2xv
d0Nhc2UoZW1pdEp1bXBJZkpTQ2VsbChyZWcpKTsKLX0KLQotQUxXQVlTX0lOTElORSBKSVQ6Okp1
bXAgSklUOjplbWl0SnVtcElmTm90SlNDZWxsKFJlZ2lzdGVySUQgcmVnKQotewotICAgIHJldHVy
biBicmFuY2hUZXN0NjQoTm9uWmVybywgcmVnLCB0YWdNYXNrUmVnaXN0ZXIpOwotfQotCi1BTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoUmVnaXN0ZXJJ
RCByZWcpCi17Ci0gICAgYWRkU2xvd0Nhc2UoZW1pdEp1bXBJZk5vdEpTQ2VsbChyZWcpKTsKLX0K
LQotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFJl
Z2lzdGVySUQgcmVnLCBpbnQgdlJlZykKLXsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3du
Tm90SW1tZWRpYXRlKHZSZWcpKQotICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
cmVnKTsKLX0KLQotaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZERvdWJsZShpbnQgaW5kZXgsIEZQ
UmVnaXN0ZXJJRCB2YWx1ZSkKLXsKLSAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdp
c3RlckluZGV4KGluZGV4KSkgewotICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGluQ29u
c3RhbnRQb29sID0gbV9jb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIoaW5kZXgpOwotICAgICAg
ICBsb2FkRG91YmxlKCZpbkNvbnN0YW50UG9vbCwgdmFsdWUpOwotICAgIH0gZWxzZQotICAgICAg
ICBsb2FkRG91YmxlKGFkZHJlc3NGb3IoaW5kZXgpLCB2YWx1ZSk7Ci19Ci0KLWlubGluZSB2b2lk
IEpJVDo6ZW1pdExvYWRJbnQzMlRvRG91YmxlKGludCBpbmRleCwgRlBSZWdpc3RlcklEIHZhbHVl
KQotewotICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW5kZXgp
KSB7Ci0gICAgICAgIEFTU0VSVChpc09wZXJhbmRDb25zdGFudEltbWVkaWF0ZUludChpbmRleCkp
OwotICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShJbW0zMihnZXRDb25zdGFudE9wZXJhbmQo
aW5kZXgpLmFzSW50MzIoKSksIHZhbHVlKTsKLSAgICB9IGVsc2UKLSAgICAgICAgY29udmVydElu
dDMyVG9Eb3VibGUoYWRkcmVzc0ZvcihpbmRleCksIHZhbHVlKTsKLX0KLQotQUxXQVlTX0lOTElO
RSBKSVQ6Okp1bXAgSklUOjplbWl0SnVtcElmSW1tZWRpYXRlSW50ZWdlcihSZWdpc3RlcklEIHJl
ZykKLXsKLSAgICByZXR1cm4gYnJhbmNoNjQoQWJvdmVPckVxdWFsLCByZWcsIHRhZ1R5cGVOdW1i
ZXJSZWdpc3Rlcik7Ci19Ci0KLUFMV0FZU19JTkxJTkUgSklUOjpKdW1wIEpJVDo6ZW1pdEp1bXBJ
Zk5vdEltbWVkaWF0ZUludGVnZXIoUmVnaXN0ZXJJRCByZWcpCi17Ci0gICAgcmV0dXJuIGJyYW5j
aDY0KEJlbG93LCByZWcsIHRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7Ci19Ci0KLUFMV0FZU19JTkxJ
TkUgSklUOjpKdW1wIEpJVDo6ZW1pdEp1bXBJZk5vdEltbWVkaWF0ZUludGVnZXJzKFJlZ2lzdGVy
SUQgcmVnMSwgUmVnaXN0ZXJJRCByZWcyLCBSZWdpc3RlcklEIHNjcmF0Y2gpCi17Ci0gICAgbW92
ZShyZWcxLCBzY3JhdGNoKTsKLSAgICBhbmQ2NChyZWcyLCBzY3JhdGNoKTsKLSAgICByZXR1cm4g
ZW1pdEp1bXBJZk5vdEltbWVkaWF0ZUludGVnZXIoc2NyYXRjaCk7Ci19Ci0KLUFMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbWVkaWF0ZUludGVnZXIoUmVnaXN0
ZXJJRCByZWcpCi17Ci0gICAgYWRkU2xvd0Nhc2UoZW1pdEp1bXBJZk5vdEltbWVkaWF0ZUludGVn
ZXIocmVnKSk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEltbWVkaWF0ZUludGVnZXJzKFJlZ2lzdGVySUQgcmVnMSwgUmVnaXN0ZXJJRCByZWcyLCBS
ZWdpc3RlcklEIHNjcmF0Y2gpCi17Ci0gICAgYWRkU2xvd0Nhc2UoZW1pdEp1bXBJZk5vdEltbWVk
aWF0ZUludGVnZXJzKHJlZzEsIHJlZzIsIHNjcmF0Y2gpKTsKLX0KLQotQUxXQVlTX0lOTElORSB2
b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tZWRpYXRlTnVtYmVyKFJlZ2lzdGVySUQg
cmVnKQotewotICAgIGFkZFNsb3dDYXNlKGVtaXRKdW1wSWZOb3RJbW1lZGlhdGVOdW1iZXIocmVn
KSk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRGYXN0QXJpdGhSZVRhZ0ltbWVk
aWF0ZShSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQotewotICAgIGVtaXRGYXN0QXJp
dGhJbnRUb0ltbU5vQ2hlY2soc3JjLCBkZXN0KTsKLX0KLQotLy8gb3BlcmFuZCBpcyBpbnQzMl90
LCBtdXN0IGhhdmUgYmVlbiB6ZXJvLWV4dGVuZGVkIGlmIHJlZ2lzdGVyIGlzIDY0LWJpdC4KLUFM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRGYXN0QXJpdGhJbnRUb0ltbU5vQ2hlY2soUmVnaXN0
ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKLXsKLSAgICBpZiAoc3JjICE9IGRlc3QpCi0gICAg
ICAgIG1vdmUoc3JjLCBkZXN0KTsKLSAgICBvcjY0KHRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgZGVz
dCk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRUYWdBc0Jvb2xJbW1lZGlhdGUo
UmVnaXN0ZXJJRCByZWcpCi17Ci0gICAgb3IzMihUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50
MzJfdD4oVmFsdWVGYWxzZSkpLCByZWcpOwotfQotCi0jZW5kaWYgLy8gVVNFKEpTVkFMVUUzMl82
NCkKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBFTkFCTEUoSklUKQotCi0jZW5k
aWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCShyZXZpc2lvbiAx
MzM5NjUpCShmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lTWV0aG9kcy5o
OjEzMzk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAwNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCwg
MjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpJVElubGluZU1ldGhvZHNfaAorI2Rl
ZmluZSBKSVRJbmxpbmVNZXRob2RzX2gKKworCisjaWYgRU5BQkxFKEpJVCkKKworbmFtZXNwYWNl
IEpTQyB7CisKK0FMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50SW1tZWRp
YXRlRG91YmxlKHVuc2lnbmVkIHNyYykKK3sKKyAgICByZXR1cm4gbV9jb2RlQmxvY2stPmlzQ29u
c3RhbnRSZWdpc3RlckluZGV4KHNyYykgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNEb3Vi
bGUoKTsKK30KKworQUxXQVlTX0lOTElORSBKU1ZhbHVlIEpJVDo6Z2V0Q29uc3RhbnRPcGVyYW5k
KHVuc2lnbmVkIHNyYykKK3sKKyAgICBBU1NFUlQobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdp
c3RlckluZGV4KHNyYykpOworICAgIHJldHVybiBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3Jj
KTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dENlbGxUb0NhbGxGcmFtZUhl
YWRlcihSZWdpc3RlcklEIGZyb20sIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlckVudHJ5IGVudHJ5
KQoreworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6Q2VsbFRhZyksIHRhZ0ZvcihlbnRyeSwgY2FsbEZyYW1lUmVnaXN0ZXIpKTsKKyAgICBz
dG9yZTMyKGZyb20sIHBheWxvYWRGb3IoZW50cnksIGNhbGxGcmFtZVJlZ2lzdGVyKSk7CisjZWxz
ZQorICAgIHN0b3JlNjQoZnJvbSwgYWRkcmVzc0ZvcihlbnRyeSwgY2FsbEZyYW1lUmVnaXN0ZXIp
KTsKKyNlbmRpZgorfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0SW50VG9DYWxs
RnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJFbnRy
eSBlbnRyeSkKK3sKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIHN0b3JlMzIoVHJ1c3RlZElt
bTMyKEludDMyVGFnKSwgaW50VGFnRm9yKGVudHJ5LCBjYWxsRnJhbWVSZWdpc3RlcikpOworICAg
IHN0b3JlMzIoZnJvbSwgaW50UGF5bG9hZEZvcihlbnRyeSwgY2FsbEZyYW1lUmVnaXN0ZXIpKTsK
KyNlbHNlCisgICAgc3RvcmU2NChmcm9tLCBhZGRyZXNzRm9yKGVudHJ5LCBjYWxsRnJhbWVSZWdp
c3RlcikpOworI2VuZGlmCit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRUb0Nh
bGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlckVu
dHJ5IGVudHJ5KQoreworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgc3RvcmVQdHIoZnJvbSwg
cGF5bG9hZEZvcihlbnRyeSwgY2FsbEZyYW1lUmVnaXN0ZXIpKTsKKyNlbHNlCisgICAgc3RvcmU2
NChmcm9tLCBhZGRyZXNzRm9yKGVudHJ5LCBjYWxsRnJhbWVSZWdpc3RlcikpOworI2VuZGlmCit9
CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRJbW1lZGlhdGVUb0NhbGxGcmFtZUhl
YWRlcih2b2lkKiB2YWx1ZSwgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyRW50cnkgZW50cnkpCit7
CisgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cih2YWx1ZSksIEFkZHJlc3MoY2FsbEZyYW1lUmVn
aXN0ZXIsIGVudHJ5ICogc2l6ZW9mKFJlZ2lzdGVyKSkpOworfQorCitBTFdBWVNfSU5MSU5FIHZv
aWQgSklUOjplbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihKU1N0YWNrOjpDYWxsRnJhbWVI
ZWFkZXJFbnRyeSBlbnRyeSwgUmVnaXN0ZXJJRCB0bywgUmVnaXN0ZXJJRCBmcm9tKQoreworICAg
IGxvYWRQdHIoQWRkcmVzcyhmcm9tLCBlbnRyeSAqIHNpemVvZihSZWdpc3RlcikpLCB0byk7Cisj
aWYgVVNFKEpTVkFMVUU2NCkKKyAgICBraWxsTGFzdFJlc3VsdFJlZ2lzdGVyKCk7CisjZW5kaWYK
K30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXIz
MihKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJFbnRyeSBlbnRyeSwgUmVnaXN0ZXJJRCB0bywgUmVn
aXN0ZXJJRCBmcm9tKQoreworICAgIGxvYWQzMihBZGRyZXNzKGZyb20sIGVudHJ5ICogc2l6ZW9m
KFJlZ2lzdGVyKSksIHRvKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIGtpbGxMYXN0UmVzdWx0
UmVnaXN0ZXIoKTsKKyNlbmRpZgorfQorCisjaWYgVVNFKEpTVkFMVUU2NCkKK0FMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OmVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyNjQoSlNTdGFjazo6Q2FsbEZy
YW1lSGVhZGVyRW50cnkgZW50cnksIFJlZ2lzdGVySUQgdG8sIFJlZ2lzdGVySUQgZnJvbSkKK3sK
KyAgICBsb2FkNjQoQWRkcmVzcyhmcm9tLCBlbnRyeSAqIHNpemVvZihSZWdpc3RlcikpLCB0byk7
CisgICAga2lsbExhc3RSZXN1bHRSZWdpc3RlcigpOworfQorI2VuZGlmCisKK0FMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OmVtaXRMb2FkQ2hhcmFjdGVyU3RyaW5nKFJlZ2lzdGVySUQgc3JjLCBSZWdp
c3RlcklEIGRzdCwgSnVtcExpc3QmIGZhaWx1cmVzKQoreworICAgIGZhaWx1cmVzLmFwcGVuZChi
cmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3Moc3JjLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgp
KSwgVHJ1c3RlZEltbVB0cihtX2dsb2JhbERhdGEtPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsK
KyAgICBmYWlsdXJlcy5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHNyYywgVGh1bmtIZWxwZXJzOjpqc1N0cmluZ0xlbmd0aE9mZnNldCgpKSwgVHJ1c3Rl
ZEltbTMyKDEpKSk7CisgICAgbG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzcmMsIFRo
dW5rSGVscGVyczo6anNTdHJpbmdWYWx1ZU9mZnNldCgpKSwgZHN0KTsKKyAgICBmYWlsdXJlcy5h
cHBlbmQoYnJhbmNoVGVzdDMyKFplcm8sIGRzdCkpOworICAgIGxvYWRQdHIoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoZHN0LCBUaHVua0hlbHBlcnM6OnN0cmluZ0ltcGxGbGFnc09mZnNldCgpKSwg
cmVnVDEpOworICAgIGxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZHN0LCBUaHVua0hl
bHBlcnM6OnN0cmluZ0ltcGxEYXRhT2Zmc2V0KCkpLCBkc3QpOworCisgICAgSnVtcExpc3QgaXMx
NkJpdDsKKyAgICBKdW1wTGlzdCBjb250OEJpdDsKKyAgICBpczE2Qml0LmFwcGVuZChicmFuY2hU
ZXN0MzIoWmVybywgcmVnVDEsIFRydXN0ZWRJbW0zMihUaHVua0hlbHBlcnM6OnN0cmluZ0ltcGw4
Qml0RmxhZygpKSkpOworICAgIGxvYWQ4KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGRzdCwgMCks
IGRzdCk7CisgICAgY29udDhCaXQuYXBwZW5kKGp1bXAoKSk7CisgICAgaXMxNkJpdC5saW5rKHRo
aXMpOworICAgIGxvYWQxNihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhkc3QsIDApLCBkc3QpOwor
ICAgIGNvbnQ4Qml0LmxpbmsodGhpcyk7Cit9CisKK0FMV0FZU19JTkxJTkUgSklUOjpDYWxsIEpJ
VDo6ZW1pdE5ha2VkQ2FsbChDb2RlUHRyIGZ1bmN0aW9uKQoreworICAgIEFTU0VSVChtX2J5dGVj
b2RlT2Zmc2V0ICE9ICh1bnNpZ25lZCktMSk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJl
IGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNv
ZGVPZmZzZXQgaXMgc2V0LgorCisgICAgQ2FsbCBuYWtlZENhbGwgPSBuZWFyQ2FsbCgpOworICAg
IG1fY2FsbHMuYXBwZW5kKENhbGxSZWNvcmQobmFrZWRDYWxsLCBtX2J5dGVjb2RlT2Zmc2V0LCBm
dW5jdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKSk7CisgICAgcmV0dXJuIG5ha2VkQ2FsbDsKK30K
KworQUxXQVlTX0lOTElORSBib29sIEpJVDo6YXRKdW1wVGFyZ2V0KCkKK3sKKyAgICB3aGlsZSAo
bV9qdW1wVGFyZ2V0c1Bvc2l0aW9uIDwgbV9jb2RlQmxvY2stPm51bWJlck9mSnVtcFRhcmdldHMo
KSAmJiBtX2NvZGVCbG9jay0+anVtcFRhcmdldChtX2p1bXBUYXJnZXRzUG9zaXRpb24pIDw9IG1f
Ynl0ZWNvZGVPZmZzZXQpIHsKKyAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5qdW1wVGFyZ2V0KG1f
anVtcFRhcmdldHNQb3NpdGlvbikgPT0gbV9ieXRlY29kZU9mZnNldCkKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICArK21fanVtcFRhcmdldHNQb3NpdGlvbjsKKyAgICB9CisgICAg
cmV0dXJuIGZhbHNlOworfQorCisjaWYgZGVmaW5lZChBU1NFTUJMRVJfSEFTX0NPTlNUQU5UX1BP
T0wpICYmIEFTU0VNQkxFUl9IQVNfQ09OU1RBTlRfUE9PTAorCitBTFdBWVNfSU5MSU5FIHZvaWQg
SklUOjpiZWdpblVuaW50ZXJydXB0ZWRTZXF1ZW5jZShpbnQgaW5zblNwYWNlLCBpbnQgY29uc3RT
cGFjZSkKK3sKKyNpZiBDUFUoQVJNX1RSQURJVElPTkFMKQorI2lmbmRlZiBOREVCVUcKKyAgICAv
LyBFbnN1cmUgdGhlIGxhYmVsIGFmdGVyIHRoZSBzZXF1ZW5jZSBjYW4gYWxzbyBmaXQKKyAgICBp
bnNuU3BhY2UgKz0gc2l6ZW9mKEFSTVdvcmQpOworICAgIGNvbnN0U3BhY2UgKz0gc2l6ZW9mKHVp
bnQ2NF90KTsKKyNlbmRpZgorCisgICAgZW5zdXJlU3BhY2UoaW5zblNwYWNlLCBjb25zdFNwYWNl
KTsKKworI2VsaWYgQ1BVKFNINCkKKyNpZm5kZWYgTkRFQlVHCisgICAgaW5zblNwYWNlICs9IHNp
emVvZihTSDRXb3JkKTsKKyAgICBjb25zdFNwYWNlICs9IHNpemVvZih1aW50NjRfdCk7CisjZW5k
aWYKKworICAgIG1fYXNzZW1ibGVyLmVuc3VyZVNwYWNlKGluc25TcGFjZSArIG1fYXNzZW1ibGVy
Lm1heEluc3RydWN0aW9uU2l6ZSArIDIsIGNvbnN0U3BhY2UgKyA4KTsKKyNlbmRpZgorCisjaWYg
ZGVmaW5lZChBU1NFTUJMRVJfSEFTX0NPTlNUQU5UX1BPT0wpICYmIEFTU0VNQkxFUl9IQVNfQ09O
U1RBTlRfUE9PTAorI2lmbmRlZiBOREVCVUcKKyAgICBtX3VuaW50ZXJydXB0ZWRJbnN0cnVjdGlv
blNlcXVlbmNlQmVnaW4gPSBsYWJlbCgpOworICAgIG1fdW5pbnRlcnJ1cHRlZENvbnN0YW50U2Vx
dWVuY2VCZWdpbiA9IHNpemVPZkNvbnN0YW50UG9vbCgpOworI2VuZGlmCisjZW5kaWYKK30KKwor
QUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW5kVW5pbnRlcnJ1cHRlZFNlcXVlbmNlKGludCBpbnNu
U3BhY2UsIGludCBjb25zdFNwYWNlLCBpbnQgZHN0KQoreworICAgIFVOVVNFRF9QQVJBTShkc3Qp
OworI2lmIGRlZmluZWQoQVNTRU1CTEVSX0hBU19DT05TVEFOVF9QT09MKSAmJiBBU1NFTUJMRVJf
SEFTX0NPTlNUQU5UX1BPT0wKKyAgICAvKiBUaGVyZSBhcmUgc2V2ZXJhbCBjYXNlcyB3aGVuIHRo
ZSB1bmludGVycnVwdGVkIHNlcXVlbmNlIGlzIGxhcmdlciB0aGFuCisgICAgICogbWF4aW11bSBy
ZXF1aXJlZCBvZmZzZXQgZm9yIHBhdGhpbmcgdGhlIHNhbWUgc2VxdWVuY2UuIEVnLjogaWYgaW4g
YQorICAgICAqIHVuaW50ZXJydXB0ZWQgc2VxdWVuY2UgdGhlIGxhc3QgbWFjcm9hc3NlbWJsZXIn
cyBpbnN0cnVjdGlvbiBpcyBhIHN0dWIKKyAgICAgKiBjYWxsLCBpdCBlbWl0cyBzdG9yZSBpbnN0
cnVjdGlvbihzKSB3aGljaCBzaG91bGQgbm90IGJlIGluY2x1ZGVkIGluIHRoZQorICAgICAqIGNh
bGN1bGF0aW9uIG9mIGxlbmd0aCBvZiB1bmludGVycnVwdGVkIHNlcXVlbmNlLiBTbywgdGhlIGlu
c25TcGFjZSBhbmQKKyAgICAgKiBjb25zdFNwYWNlIHNob3VsZCBiZSB1cHBlciBsaW1pdCBpbnN0
ZWFkIG9mIGhhcmQgbGltaXQuCisgICAgICovCisjaWYgQ1BVKFNINCkKKyAgICBpZiAoKGRzdCA+
IDE1KSB8fCAoZHN0IDwgLTE2KSkgeworICAgICAgICBpbnNuU3BhY2UgKz0gODsKKyAgICAgICAg
Y29uc3RTcGFjZSArPSAyOworICAgIH0KKworICAgIGlmICgoKGRzdCA+PSAtMTYpICYmIChkc3Qg
PCAwKSkgfHwgKChkc3QgPiA3KSAmJiAoZHN0IDw9IDE1KSkpCisgICAgICAgIGluc25TcGFjZSAr
PSA4OworI2VuZGlmCisgICAgQVNTRVJUKGRpZmZlcmVuY2VCZXR3ZWVuKG1fdW5pbnRlcnJ1cHRl
ZEluc3RydWN0aW9uU2VxdWVuY2VCZWdpbiwgbGFiZWwoKSkgPD0gaW5zblNwYWNlKTsKKyAgICBB
U1NFUlQoc2l6ZU9mQ29uc3RhbnRQb29sKCkgLSBtX3VuaW50ZXJydXB0ZWRDb25zdGFudFNlcXVl
bmNlQmVnaW4gPD0gY29uc3RTcGFjZSk7CisjZW5kaWYKK30KKworI2VuZGlmCisKKyNpZiBDUFUo
QVJNKQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpwcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRl
ckNhbGwoUmVnaXN0ZXJJRCByZWcpCit7CisgICAgbW92ZShsaW5rUmVnaXN0ZXIsIHJlZyk7Cit9
CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0
dXJuKFJlZ2lzdGVySUQgcmVnKQoreworICAgIG1vdmUocmVnLCBsaW5rUmVnaXN0ZXIpOworfQor
CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpyZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVy
bihBZGRyZXNzIGFkZHJlc3MpCit7CisgICAgbG9hZFB0cihhZGRyZXNzLCBsaW5rUmVnaXN0ZXIp
OworfQorI2VsaWYgQ1BVKFNINCkKKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6cHJlc2VydmVS
ZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKFJlZ2lzdGVySUQgcmVnKQoreworICAgIG1fYXNzZW1ibGVy
LnN0c3ByKHJlZyk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnJlc3RvcmVSZXR1cm5B
ZGRyZXNzQmVmb3JlUmV0dXJuKFJlZ2lzdGVySUQgcmVnKQoreworICAgIG1fYXNzZW1ibGVyLmxk
c3ByKHJlZyk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnJlc3RvcmVSZXR1cm5BZGRy
ZXNzQmVmb3JlUmV0dXJuKEFkZHJlc3MgYWRkcmVzcykKK3sKKyAgICBsb2FkUHRyTGlua1JlZyhh
ZGRyZXNzKTsKK30KKworI2VsaWYgQ1BVKE1JUFMpCisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6
OnByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChSZWdpc3RlcklEIHJlZykKK3sKKyAgICBt
b3ZlKHJldHVybkFkZHJlc3NSZWdpc3RlciwgcmVnKTsKK30KKworQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6cmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4oUmVnaXN0ZXJJRCByZWcpCit7
CisgICAgbW92ZShyZWcsIHJldHVybkFkZHJlc3NSZWdpc3Rlcik7Cit9CisKK0FMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKEFkZHJlc3MgYWRk
cmVzcykKK3sKKyAgICBsb2FkUHRyKGFkZHJlc3MsIHJldHVybkFkZHJlc3NSZWdpc3Rlcik7Cit9
CisKKyNlbHNlIC8vIENQVShYODYpIHx8IENQVShYODZfNjQpCisKK0FMV0FZU19JTkxJTkUgdm9p
ZCBKSVQ6OnByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChSZWdpc3RlcklEIHJlZykKK3sK
KyAgICBwb3AocmVnKTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6cmVzdG9yZVJldHVy
bkFkZHJlc3NCZWZvcmVSZXR1cm4oUmVnaXN0ZXJJRCByZWcpCit7CisgICAgcHVzaChyZWcpOwor
fQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpyZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJl
dHVybihBZGRyZXNzIGFkZHJlc3MpCit7CisgICAgcHVzaChhZGRyZXNzKTsKK30KKworI2VuZGlm
CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnJlc3RvcmVBcmd1bWVudFJlZmVyZW5jZSgpCit7
CisgICAgbW92ZShzdGFja1BvaW50ZXJSZWdpc3RlciwgZmlyc3RBcmd1bWVudFJlZ2lzdGVyKTsK
KyAgICBwb2tlKGNhbGxGcmFtZVJlZ2lzdGVyLCBPQkpFQ1RfT0ZGU0VUT0Yoc3RydWN0IEpJVFN0
YWNrRnJhbWUsIGNhbGxGcmFtZSkgLyBzaXplb2Yodm9pZCopKTsKK30KKworQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6dXBkYXRlVG9wQ2FsbEZyYW1lKCkKK3sKKyAgICBBU1NFUlQoc3RhdGljX2Nh
c3Q8aW50PihtX2J5dGVjb2RlT2Zmc2V0KSA+PSAwKTsKKyAgICBpZiAobV9ieXRlY29kZU9mZnNl
dCkgeworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2luKCkgKyBtX2J5dGVjb2RlT2Zmc2V0
ICsgMSksIGludFRhZ0ZvcihKU1N0YWNrOjpBcmd1bWVudENvdW50KSk7CisjZWxzZQorICAgICAg
ICBzdG9yZTMyKFRydXN0ZWRJbW0zMihtX2J5dGVjb2RlT2Zmc2V0ICsgMSksIGludFRhZ0ZvcihK
U1N0YWNrOjpBcmd1bWVudENvdW50KSk7CisjZW5kaWYKKyAgICB9CisgICAgc3RvcmVQdHIoY2Fs
bEZyYW1lUmVnaXN0ZXIsICZtX2dsb2JhbERhdGEtPnRvcENhbGxGcmFtZSk7Cit9CisKK0FMV0FZ
U19JTkxJTkUgdm9pZCBKSVQ6OnJlc3RvcmVBcmd1bWVudFJlZmVyZW5jZUZvclRyYW1wb2xpbmUo
KQoreworI2lmIENQVShYODYpCisgICAgLy8gV2l0aGluIGEgdHJhbXBvbGluZSB0aGUgcmV0dXJu
IGFkZHJlc3Mgd2lsbCBiZSBvbiB0aGUgc3RhY2sgYXQgdGhpcyBwb2ludC4KKyAgICBhZGRQdHIo
VHJ1c3RlZEltbTMyKHNpemVvZih2b2lkKikpLCBzdGFja1BvaW50ZXJSZWdpc3RlciwgZmlyc3RB
cmd1bWVudFJlZ2lzdGVyKTsKKyNlbGlmIENQVShBUk0pCisgICAgbW92ZShzdGFja1BvaW50ZXJS
ZWdpc3RlciwgZmlyc3RBcmd1bWVudFJlZ2lzdGVyKTsKKyNlbGlmIENQVShTSDQpCisgICAgbW92
ZShzdGFja1BvaW50ZXJSZWdpc3RlciwgZmlyc3RBcmd1bWVudFJlZ2lzdGVyKTsKKyNlbmRpZgor
ICAgIC8vIEluIHRoZSB0cmFtcG9saW5lIG9uIHg4Ni02NCwgdGhlIGZpcnN0IGFyZ3VtZW50IHJl
Z2lzdGVyIGlzIG5vdCBvdmVyd3JpdHRlbi4KK30KKworQUxXQVlTX0lOTElORSBKSVQ6Okp1bXAg
SklUOjpjaGVja1N0cnVjdHVyZShSZWdpc3RlcklEIHJlZywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
Cit7CisgICAgcmV0dXJuIGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWcsIEpTQ2VsbDo6
c3RydWN0dXJlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSkpOworfQorCitBTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjpsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBpbnQgdlJlZykKK3sKKyAgICBpZiAoIW1fY29kZUJs
b2NrLT5pc0tub3duTm90SW1tZWRpYXRlKHZSZWcpKQorICAgICAgICBsaW5rU2xvd0Nhc2UoaXRl
cik7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFkZFNsb3dDYXNlKEp1bXAganVtcCkK
K3sKKyAgICBBU1NFUlQobV9ieXRlY29kZU9mZnNldCAhPSAodW5zaWduZWQpLTEpOyAvLyBUaGlz
IG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJh
dGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlT2Zmc2V0IGlzIHNldC4KKworICAgIG1fc2xvd0Nhc2Vz
LmFwcGVuZChTbG93Q2FzZUVudHJ5KGp1bXAsIG1fYnl0ZWNvZGVPZmZzZXQpKTsKK30KKworQUxX
QVlTX0lOTElORSB2b2lkIEpJVDo6YWRkU2xvd0Nhc2UoSnVtcExpc3QganVtcExpc3QpCit7Cisg
ICAgQVNTRVJUKG1fYnl0ZWNvZGVPZmZzZXQgIT0gKHVuc2lnbmVkKS0xKTsgLy8gVGhpcyBtZXRo
b2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24s
IHNvIHRoYXQgbV9ieXRlY29kZU9mZnNldCBpcyBzZXQuCisKKyAgICBjb25zdCBKdW1wTGlzdDo6
SnVtcFZlY3RvciYganVtcFZlY3RvciA9IGp1bXBMaXN0Lmp1bXBzKCk7CisgICAgc2l6ZV90IHNp
emUgPSBqdW1wVmVjdG9yLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7
ICsraSkKKyAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoanVtcFZlY3Rv
cltpXSwgbV9ieXRlY29kZU9mZnNldCkpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjph
ZGRTbG93Q2FzZSgpCit7CisgICAgQVNTRVJUKG1fYnl0ZWNvZGVPZmZzZXQgIT0gKHVuc2lnbmVk
KS0xKTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29s
ZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZU9mZnNldCBpcyBzZXQuCisgICAg
CisgICAgSnVtcCBlbXB0eUp1bXA7IC8vIERvaW5nIGl0IHRoaXMgd2F5IHRvIG1ha2UgV2luZG93
cyBoYXBweS4KKyAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShlbXB0eUp1bXAs
IG1fYnl0ZWNvZGVPZmZzZXQpKTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YWRkSnVt
cChKdW1wIGp1bXAsIGludCByZWxhdGl2ZU9mZnNldCkKK3sKKyAgICBBU1NFUlQobV9ieXRlY29k
ZU9mZnNldCAhPSAodW5zaWduZWQpLTEpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBj
YWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2Rl
T2Zmc2V0IGlzIHNldC4KKworICAgIG1fam1wVGFibGUuYXBwZW5kKEp1bXBUYWJsZShqdW1wLCBt
X2J5dGVjb2RlT2Zmc2V0ICsgcmVsYXRpdmVPZmZzZXQpKTsKK30KKworQUxXQVlTX0lOTElORSB2
b2lkIEpJVDo6ZW1pdEp1bXBTbG93VG9Ib3QoSnVtcCBqdW1wLCBpbnQgcmVsYXRpdmVPZmZzZXQp
Cit7CisgICAgQVNTRVJUKG1fYnl0ZWNvZGVPZmZzZXQgIT0gKHVuc2lnbmVkKS0xKTsgLy8gVGhp
cyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVy
YXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZU9mZnNldCBpcyBzZXQuCisKKyAgICBqdW1wLmxpbmtU
byhtX2xhYmVsc1ttX2J5dGVjb2RlT2Zmc2V0ICsgcmVsYXRpdmVPZmZzZXRdLCB0aGlzKTsKK30K
KworQUxXQVlTX0lOTElORSBKSVQ6Okp1bXAgSklUOjplbWl0SnVtcElmTm90T2JqZWN0KFJlZ2lz
dGVySUQgc3RydWN0dXJlUmVnKQoreworICAgIHJldHVybiBicmFuY2g4KEJlbG93LCBBZGRyZXNz
KHN0cnVjdHVyZVJlZywgU3RydWN0dXJlOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJ
bW0zMihPYmplY3RUeXBlKSk7Cit9CisKK0FMV0FZU19JTkxJTkUgSklUOjpKdW1wIEpJVDo6ZW1p
dEp1bXBJZk5vdFR5cGUoUmVnaXN0ZXJJRCBiYXNlUmVnLCBSZWdpc3RlcklEIHNjcmF0Y2hSZWcs
IEpTVHlwZSB0eXBlKQoreworICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlUmVnLCBKU0NlbGw6OnN0
cnVjdHVyZU9mZnNldCgpKSwgc2NyYXRjaFJlZyk7CisgICAgcmV0dXJuIGJyYW5jaDgoTm90RXF1
YWwsIEFkZHJlc3Moc2NyYXRjaFJlZywgU3RydWN0dXJlOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSks
IFRydXN0ZWRJbW0zMih0eXBlKSk7Cit9CisKKyNpZiBFTkFCTEUoU0FNUExJTkdfRkxBR1MpCitB
TFdBWVNfSU5MSU5FIHZvaWQgSklUOjpzZXRTYW1wbGluZ0ZsYWcoaW50MzJfdCBmbGFnKQorewor
ICAgIEFTU0VSVChmbGFnID49IDEpOworICAgIEFTU0VSVChmbGFnIDw9IDMyKTsKKyAgICBvcjMy
KFRydXN0ZWRJbW0zMigxdSA8PCAoZmxhZyAtIDEpKSwgQWJzb2x1dGVBZGRyZXNzKFNhbXBsaW5n
RmxhZ3M6OmFkZHJlc3NPZkZsYWdzKCkpKTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6
Y2xlYXJTYW1wbGluZ0ZsYWcoaW50MzJfdCBmbGFnKQoreworICAgIEFTU0VSVChmbGFnID49IDEp
OworICAgIEFTU0VSVChmbGFnIDw9IDMyKTsKKyAgICBhbmQzMihUcnVzdGVkSW1tMzIofigxdSA8
PCAoZmxhZyAtIDEpKSksIEFic29sdXRlQWRkcmVzcyhTYW1wbGluZ0ZsYWdzOjphZGRyZXNzT2ZG
bGFncygpKSk7Cit9CisjZW5kaWYKKworI2lmIEVOQUJMRShTQU1QTElOR19DT1VOVEVSUykKK0FM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRDb3VudChBYnN0cmFjdFNhbXBsaW5nQ291bnRlciYg
Y291bnRlciwgaW50MzJfdCBjb3VudCkKK3sKKyAgICBhZGQ2NChUcnVzdGVkSW1tMzIoY291bnQp
LCBBYnNvbHV0ZUFkZHJlc3MoY291bnRlci5hZGRyZXNzT2ZDb3VudGVyKCkpKTsKK30KKyNlbmRp
ZgorCisjaWYgRU5BQkxFKE9QQ09ERV9TQU1QTElORykKKyNpZiBDUFUoWDg2XzY0KQorQUxXQVlT
X0lOTElORSB2b2lkIEpJVDo6c2FtcGxlSW5zdHJ1Y3Rpb24oSW5zdHJ1Y3Rpb24qIGluc3RydWN0
aW9uLCBib29sIGluSG9zdEZ1bmN0aW9uKQoreworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2lu
dGVycHJldGVyLT5zYW1wbGVyKCktPnNhbXBsZVNsb3QoKSksIFg4NlJlZ2lzdGVyczo6ZWN4KTsK
KyAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKG1faW50ZXJwcmV0ZXItPnNhbXBsZXIoKS0+ZW5j
b2RlU2FtcGxlKGluc3RydWN0aW9uLCBpbkhvc3RGdW5jdGlvbikpLCBYODZSZWdpc3RlcnM6OmVj
eCk7Cit9CisjZWxzZQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6c2FtcGxlSW5zdHJ1Y3Rpb24o
SW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBib29sIGluSG9zdEZ1bmN0aW9uKQoreworICAgIHN0
b3JlUHRyKFRydXN0ZWRJbW1QdHIobV9pbnRlcnByZXRlci0+c2FtcGxlcigpLT5lbmNvZGVTYW1w
bGUoaW5zdHJ1Y3Rpb24sIGluSG9zdEZ1bmN0aW9uKSksIG1faW50ZXJwcmV0ZXItPnNhbXBsZXIo
KS0+c2FtcGxlU2xvdCgpKTsKK30KKyNlbmRpZgorI2VuZGlmCisKKyNpZiBFTkFCTEUoQ09ERUJM
T0NLX1NBTVBMSU5HKQorI2lmIENQVShYODZfNjQpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpz
YW1wbGVDb2RlQmxvY2soQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgbW92ZShUcnVzdGVk
SW1tUHRyKG1faW50ZXJwcmV0ZXItPnNhbXBsZXIoKS0+Y29kZUJsb2NrU2xvdCgpKSwgWDg2UmVn
aXN0ZXJzOjplY3gpOworICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoY29kZUJsb2NrKSwgWDg2
UmVnaXN0ZXJzOjplY3gpOworfQorI2Vsc2UKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnNhbXBs
ZUNvZGVCbG9jayhDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICBzdG9yZVB0cihUcnVzdGVk
SW1tUHRyKGNvZGVCbG9jayksIG1faW50ZXJwcmV0ZXItPnNhbXBsZXIoKS0+Y29kZUJsb2NrU2xv
dCgpKTsKK30KKyNlbmRpZgorI2VuZGlmCisKK0FMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3Bl
cmFuZENvbnN0YW50SW1tZWRpYXRlQ2hhcih1bnNpZ25lZCBzcmMpCit7CisgICAgcmV0dXJuIG1f
Y29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChzcmMpICYmIGdldENvbnN0YW50T3Bl
cmFuZChzcmMpLmlzU3RyaW5nKCkgJiYgYXNTdHJpbmcoZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYyku
YXNDZWxsKCkpLT5sZW5ndGgoKSA9PSAxOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2xhc3NU
eXBlLCBNYXJrZWRCbG9jazo6RGVzdHJ1Y3RvclR5cGUgZGVzdHJ1Y3RvclR5cGUsIHR5cGVuYW1l
IFN0cnVjdHVyZVR5cGU+IGlubGluZSB2b2lkIEpJVDo6ZW1pdEFsbG9jYXRlQmFzaWNKU09iamVj
dChTdHJ1Y3R1cmVUeXBlIHN0cnVjdHVyZSwgUmVnaXN0ZXJJRCByZXN1bHQsIFJlZ2lzdGVySUQg
c3RvcmFnZVB0cikKK3sKKyAgICBzaXplX3Qgc2l6ZSA9IENsYXNzVHlwZTo6YWxsb2NhdGlvblNp
emUoSU5MSU5FX1NUT1JBR0VfQ0FQQUNJVFkpOworICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2Nh
dG9yID0gMDsKKyAgICBpZiAoZGVzdHJ1Y3RvclR5cGUgPT0gTWFya2VkQmxvY2s6Ok5vcm1hbCkK
KyAgICAgICAgYWxsb2NhdG9yID0gJm1fZ2xvYmFsRGF0YS0+aGVhcC5hbGxvY2F0b3JGb3JPYmpl
Y3RXaXRoTm9ybWFsRGVzdHJ1Y3RvcihzaXplKTsKKyAgICBlbHNlIGlmIChkZXN0cnVjdG9yVHlw
ZSA9PSBNYXJrZWRCbG9jazo6SW1tb3J0YWxTdHJ1Y3R1cmUpCisgICAgICAgIGFsbG9jYXRvciA9
ICZtX2dsb2JhbERhdGEtPmhlYXAuYWxsb2NhdG9yRm9yT2JqZWN0V2l0aEltbW9ydGFsU3RydWN0
dXJlRGVzdHJ1Y3RvcihzaXplKTsKKyAgICBlbHNlCisgICAgICAgIGFsbG9jYXRvciA9ICZtX2ds
b2JhbERhdGEtPmhlYXAuYWxsb2NhdG9yRm9yT2JqZWN0V2l0aG91dERlc3RydWN0b3Ioc2l6ZSk7
CisgICAgbG9hZFB0cigmYWxsb2NhdG9yLT5tX2ZyZWVMaXN0LmhlYWQsIHJlc3VsdCk7CisgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihaZXJvLCByZXN1bHQpKTsKKworICAgIC8vIHJlbW92
ZSB0aGUgb2JqZWN0IGZyb20gdGhlIGZyZWUgbGlzdAorICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1
bHQpLCBzdG9yYWdlUHRyKTsKKyAgICBzdG9yZVB0cihzdG9yYWdlUHRyLCAmYWxsb2NhdG9yLT5t
X2ZyZWVMaXN0LmhlYWQpOworCisgICAgLy8gaW5pdGlhbGl6ZSB0aGUgb2JqZWN0J3Mgc3RydWN0
dXJlCisgICAgc3RvcmVQdHIoc3RydWN0dXJlLCBBZGRyZXNzKHJlc3VsdCwgSlNDZWxsOjpzdHJ1
Y3R1cmVPZmZzZXQoKSkpOworCisgICAgLy8gaW5pdGlhbGl6ZSB0aGUgb2JqZWN0J3MgcHJvcGVy
dHkgc3RvcmFnZSBwb2ludGVyCisgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cigwKSwgQWRkcmVz
cyhyZXN1bHQsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSkpOworfQorCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4gaW5saW5lIHZvaWQgSklUOjplbWl0QWxsb2NhdGVKU0ZpbmFsT2JqZWN0KFQg
c3RydWN0dXJlLCBSZWdpc3RlcklEIHJlc3VsdCwgUmVnaXN0ZXJJRCBzY3JhdGNoKQoreworICAg
IGVtaXRBbGxvY2F0ZUJhc2ljSlNPYmplY3Q8SlNGaW5hbE9iamVjdCwgTWFya2VkQmxvY2s6Ok5v
bmUsIFQ+KHN0cnVjdHVyZSwgcmVzdWx0LCBzY3JhdGNoKTsKK30KKworI2lmIEVOQUJMRShWQUxV
RV9QUk9GSUxFUikKK2lubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1
ZVByb2ZpbGUqIHZhbHVlUHJvZmlsZSkKK3sKKyAgICBBU1NFUlQoc2hvdWxkRW1pdFByb2ZpbGlu
ZygpKTsKKyAgICBBU1NFUlQodmFsdWVQcm9maWxlKTsKKworICAgIGNvbnN0IFJlZ2lzdGVySUQg
dmFsdWUgPSByZWdUMDsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIGNvbnN0IFJlZ2lzdGVy
SUQgdmFsdWVUYWcgPSByZWdUMTsKKyNlbmRpZgorICAgIGNvbnN0IFJlZ2lzdGVySUQgc2NyYXRj
aCA9IHJlZ1QzOworICAgIAorICAgIGlmIChWYWx1ZVByb2ZpbGU6Om51bWJlck9mQnVja2V0cyA9
PSAxKSB7CisgICAgICAgIC8vIFdlJ3JlIGluIGEgc2ltcGxlIGNvbmZpZ3VyYXRpb246IG9ubHkg
b25lIGJ1Y2tldCwgc28gd2UgY2FuIGp1c3QgZG8gYSBkaXJlY3QKKyAgICAgICAgLy8gc3RvcmUu
CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgc3RvcmU2NCh2YWx1ZSwgdmFsdWVQcm9maWxl
LT5tX2J1Y2tldHMpOworI2Vsc2UKKyAgICAgICAgRW5jb2RlZFZhbHVlRGVzY3JpcHRvciogZGVz
Y3JpcHRvciA9IGJpdHdpc2VfY2FzdDxFbmNvZGVkVmFsdWVEZXNjcmlwdG9yKj4odmFsdWVQcm9m
aWxlLT5tX2J1Y2tldHMpOworICAgICAgICBzdG9yZTMyKHZhbHVlLCAmZGVzY3JpcHRvci0+YXNC
aXRzLnBheWxvYWQpOworICAgICAgICBzdG9yZTMyKHZhbHVlVGFnLCAmZGVzY3JpcHRvci0+YXNC
aXRzLnRhZyk7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAo
bV9yYW5kb21HZW5lcmF0b3IuZ2V0VWludDMyKCkgJiAxKQorICAgICAgICBhZGQzMihUcnVzdGVk
SW1tMzIoMSksIGJ1Y2tldENvdW50ZXJSZWdpc3Rlcik7CisgICAgZWxzZQorICAgICAgICBhZGQz
MihUcnVzdGVkSW1tMzIoMyksIGJ1Y2tldENvdW50ZXJSZWdpc3Rlcik7CisgICAgYW5kMzIoVHJ1
c3RlZEltbTMyKFZhbHVlUHJvZmlsZTo6YnVja2V0SW5kZXhNYXNrKSwgYnVja2V0Q291bnRlclJl
Z2lzdGVyKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIodmFsdWVQcm9maWxlLT5tX2J1Y2tldHMp
LCBzY3JhdGNoKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIHN0b3JlNjQodmFsdWUsIEJhc2VJ
bmRleChzY3JhdGNoLCBidWNrZXRDb3VudGVyUmVnaXN0ZXIsIFRpbWVzRWlnaHQpKTsKKyNlbGlm
IFVTRShKU1ZBTFVFMzJfNjQpCisgICAgc3RvcmUzMih2YWx1ZSwgQmFzZUluZGV4KHNjcmF0Y2gs
IGJ1Y2tldENvdW50ZXJSZWdpc3RlciwgVGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFs
dWUsIHUuYXNCaXRzLnBheWxvYWQpKSk7CisgICAgc3RvcmUzMih2YWx1ZVRhZywgQmFzZUluZGV4
KHNjcmF0Y2gsIGJ1Y2tldENvdW50ZXJSZWdpc3RlciwgVGltZXNFaWdodCwgT0JKRUNUX09GRlNF
VE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpKTsKKyNlbmRpZgorfQorCitpbmxpbmUgdm9pZCBK
SVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpCit7Cisg
ICAgaWYgKCFzaG91bGRFbWl0UHJvZmlsaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKG1fY29kZUJsb2NrLT52YWx1ZVByb2ZpbGVGb3JCeXRlY29kZU9m
ZnNldChieXRlY29kZU9mZnNldCkpOworfQorCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoKQoreworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobV9ieXRlY29kZU9m
ZnNldCk7Cit9CisjZW5kaWYgLy8gRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQorCitpbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRBcnJheVByb2ZpbGluZ1NpdGUoUmVnaXN0ZXJJRCBzdHJ1Y3R1cmVBbmRJbmRl
eGluZ1R5cGUsIFJlZ2lzdGVySUQgc2NyYXRjaCwgQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUp
Cit7CisgICAgVU5VU0VEX1BBUkFNKHNjcmF0Y2gpOyAvLyBXZSBoYWQgZm91bmQgdGhpcyBzY3Jh
dGNoIHJlZ2lzdGVyIHVzZWZ1bCBoZXJlIGJlZm9yZSwgc28gSSB3aWxsIGtlZXAgaXQgZm9yIG5v
dy4KKyAgICAKKyAgICBSZWdpc3RlcklEIHN0cnVjdHVyZSA9IHN0cnVjdHVyZUFuZEluZGV4aW5n
VHlwZTsKKyAgICBSZWdpc3RlcklEIGluZGV4aW5nVHlwZSA9IHN0cnVjdHVyZUFuZEluZGV4aW5n
VHlwZTsKKyAgICAKKyAgICBpZiAoY2FuQmVPcHRpbWl6ZWQoKSkKKyAgICAgICAgc3RvcmVQdHIo
c3RydWN0dXJlLCBhcnJheVByb2ZpbGUtPmFkZHJlc3NPZkxhc3RTZWVuU3RydWN0dXJlKCkpOwor
CisgICAgbG9hZDgoQWRkcmVzcyhzdHJ1Y3R1cmUsIFN0cnVjdHVyZTo6aW5kZXhpbmdUeXBlT2Zm
c2V0KCkpLCBpbmRleGluZ1R5cGUpOworfQorCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBcnJheVBy
b2ZpbGluZ1NpdGVGb3JCeXRlY29kZUluZGV4KFJlZ2lzdGVySUQgc3RydWN0dXJlQW5kSW5kZXhp
bmdUeXBlLCBSZWdpc3RlcklEIHNjcmF0Y2gsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCit7Cisj
aWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQorICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGUoc3Ry
dWN0dXJlQW5kSW5kZXhpbmdUeXBlLCBzY3JhdGNoLCBtX2NvZGVCbG9jay0+Z2V0T3JBZGRBcnJh
eVByb2ZpbGUoYnl0ZWNvZGVJbmRleCkpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oYnl0ZWNv
ZGVJbmRleCk7CisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZShzdHJ1Y3R1cmVBbmRJbmRleGlu
Z1R5cGUsIHNjcmF0Y2gsIDApOworI2VuZGlmCit9CisKK2lubGluZSB2b2lkIEpJVDo6ZW1pdEFy
cmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2UoQXJyYXlQcm9maWxlKiBhcnJheVByb2Zp
bGUpCit7CisjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKSAgICAKKyAgICBzdG9yZTgoVHJ1c3Rl
ZEltbTMyKDEpLCBhcnJheVByb2ZpbGUtPmFkZHJlc3NPZk1heVN0b3JlVG9Ib2xlKCkpOworI2Vs
c2UKKyAgICBVTlVTRURfUEFSQU0oYXJyYXlQcm9maWxlKTsKKyNlbmRpZgorfQorCitzdGF0aWMg
aW5saW5lIGJvb2wgYXJyYXlQcm9maWxlU2F3KEFycmF5TW9kZXMgYXJyYXlNb2RlcywgSW5kZXhp
bmdUeXBlIGNhcGFiaWxpdHkpCit7CisjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQorICAgIHJl
dHVybiBhcnJheU1vZGVzSW5jbHVkZShhcnJheU1vZGVzLCBjYXBhYmlsaXR5KTsKKyNlbHNlCisg
ICAgVU5VU0VEX1BBUkFNKGFycmF5TW9kZXMpOworICAgIFVOVVNFRF9QQVJBTShjYXBhYmlsaXR5
KTsKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKworaW5saW5lIEpJVEFycmF5TW9kZSBK
SVQ6OmNob29zZUFycmF5TW9kZShBcnJheVByb2ZpbGUqIHByb2ZpbGUpCit7CisgICAgcHJvZmls
ZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKG1fY29kZUJsb2NrKTsKKyAgICBBcnJheU1vZGVz
IGFycmF5TW9kZXMgPSBwcm9maWxlLT5vYnNlcnZlZEFycmF5TW9kZXMoKTsKKyAgICBpZiAoYXJy
YXlQcm9maWxlU2F3KGFycmF5TW9kZXMsIERvdWJsZVNoYXBlKSkKKyAgICAgICAgcmV0dXJuIEpJ
VERvdWJsZTsKKyAgICBpZiAoYXJyYXlQcm9maWxlU2F3KGFycmF5TW9kZXMsIEludDMyU2hhcGUp
KQorICAgICAgICByZXR1cm4gSklUSW50MzI7CisgICAgaWYgKGFycmF5UHJvZmlsZVNhdyhhcnJh
eU1vZGVzLCBBcnJheVN0b3JhZ2VTaGFwZSkpCisgICAgICAgIHJldHVybiBKSVRBcnJheVN0b3Jh
Z2U7CisgICAgcmV0dXJuIEpJVENvbnRpZ3VvdXM7Cit9CisKKyNpZiBVU0UoSlNWQUxVRTMyXzY0
KQorCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkVGFnKGludCBpbmRleCwgUmVnaXN0ZXJJRCB0
YWcpCit7CisgICAgUmVnaXN0ZXJJRCBtYXBwZWRUYWc7CisgICAgaWYgKGdldE1hcHBlZFRhZyhp
bmRleCwgbWFwcGVkVGFnKSkgeworICAgICAgICBtb3ZlKG1hcHBlZFRhZywgdGFnKTsKKyAgICAg
ICAgdW5tYXAodGFnKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX2NvZGVC
bG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW5kZXgpKSB7CisgICAgICAgIG1vdmUoSW1t
MzIoZ2V0Q29uc3RhbnRPcGVyYW5kKGluZGV4KS50YWcoKSksIHRhZyk7CisgICAgICAgIHVubWFw
KHRhZyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBsb2FkMzIodGFnRm9yKGluZGV4
KSwgdGFnKTsKKyAgICB1bm1hcCh0YWcpOworfQorCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2Fk
UGF5bG9hZChpbnQgaW5kZXgsIFJlZ2lzdGVySUQgcGF5bG9hZCkKK3sKKyAgICBSZWdpc3RlcklE
IG1hcHBlZFBheWxvYWQ7CisgICAgaWYgKGdldE1hcHBlZFBheWxvYWQoaW5kZXgsIG1hcHBlZFBh
eWxvYWQpKSB7CisgICAgICAgIG1vdmUobWFwcGVkUGF5bG9hZCwgcGF5bG9hZCk7CisgICAgICAg
IHVubWFwKHBheWxvYWQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1fY29k
ZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbmRleCkpIHsKKyAgICAgICAgbW92ZShJ
bW0zMihnZXRDb25zdGFudE9wZXJhbmQoaW5kZXgpLnBheWxvYWQoKSksIHBheWxvYWQpOworICAg
ICAgICB1bm1hcChwYXlsb2FkKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGxvYWQz
MihwYXlsb2FkRm9yKGluZGV4KSwgcGF5bG9hZCk7CisgICAgdW5tYXAocGF5bG9hZCk7Cit9CisK
K2lubGluZSB2b2lkIEpJVDo6ZW1pdExvYWQoY29uc3QgSlNWYWx1ZSYgdiwgUmVnaXN0ZXJJRCB0
YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCkKK3sKKyAgICBtb3ZlKEltbTMyKHYucGF5bG9hZCgpKSwg
cGF5bG9hZCk7CisgICAgbW92ZShJbW0zMih2LnRhZygpKSwgdGFnKTsKK30KKworaW5saW5lIHZv
aWQgSklUOjplbWl0TG9hZChpbnQgaW5kZXgsIFJlZ2lzdGVySUQgdGFnLCBSZWdpc3RlcklEIHBh
eWxvYWQsIFJlZ2lzdGVySUQgYmFzZSkKK3sKKyAgICBBU1NFUlQodGFnICE9IHBheWxvYWQpOwor
CisgICAgaWYgKGJhc2UgPT0gY2FsbEZyYW1lUmVnaXN0ZXIpIHsKKyAgICAgICAgQVNTRVJUKHBh
eWxvYWQgIT0gYmFzZSk7CisgICAgICAgIGVtaXRMb2FkUGF5bG9hZChpbmRleCwgcGF5bG9hZCk7
CisgICAgICAgIGVtaXRMb2FkVGFnKGluZGV4LCB0YWcpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaWYgKHBheWxvYWQgPT0gYmFzZSkgeyAvLyBhdm9pZCBzdG9tcGluZyBiYXNlCisg
ICAgICAgIGxvYWQzMih0YWdGb3IoaW5kZXgsIGJhc2UpLCB0YWcpOworICAgICAgICBsb2FkMzIo
cGF5bG9hZEZvcihpbmRleCwgYmFzZSksIHBheWxvYWQpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgbG9hZDMyKHBheWxvYWRGb3IoaW5kZXgsIGJhc2UpLCBwYXlsb2FkKTsKKyAgICBs
b2FkMzIodGFnRm9yKGluZGV4LCBiYXNlKSwgdGFnKTsKK30KKworaW5saW5lIHZvaWQgSklUOjpl
bWl0TG9hZDIoaW50IGluZGV4MSwgUmVnaXN0ZXJJRCB0YWcxLCBSZWdpc3RlcklEIHBheWxvYWQx
LCBpbnQgaW5kZXgyLCBSZWdpc3RlcklEIHRhZzIsIFJlZ2lzdGVySUQgcGF5bG9hZDIpCit7Cisg
ICAgaWYgKGlzTWFwcGVkKGluZGV4MSkpIHsKKyAgICAgICAgZW1pdExvYWQoaW5kZXgxLCB0YWcx
LCBwYXlsb2FkMSk7CisgICAgICAgIGVtaXRMb2FkKGluZGV4MiwgdGFnMiwgcGF5bG9hZDIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIGVtaXRMb2FkKGluZGV4MiwgdGFnMiwgcGF5bG9h
ZDIpOworICAgIGVtaXRMb2FkKGluZGV4MSwgdGFnMSwgcGF5bG9hZDEpOworfQorCitpbmxpbmUg
dm9pZCBKSVQ6OmVtaXRMb2FkRG91YmxlKGludCBpbmRleCwgRlBSZWdpc3RlcklEIHZhbHVlKQor
eworICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW5kZXgpKSB7
CisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wgPSBtX2NvZGVC
bG9jay0+Y29uc3RhbnRSZWdpc3RlcihpbmRleCk7CisgICAgICAgIGxvYWREb3VibGUoJmluQ29u
c3RhbnRQb29sLCB2YWx1ZSk7CisgICAgfSBlbHNlCisgICAgICAgIGxvYWREb3VibGUoYWRkcmVz
c0ZvcihpbmRleCksIHZhbHVlKTsKK30KKworaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZEludDMy
VG9Eb3VibGUoaW50IGluZGV4LCBGUFJlZ2lzdGVySUQgdmFsdWUpCit7CisgICAgaWYgKG1fY29k
ZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbmRleCkpIHsKKyAgICAgICAgV3JpdGVC
YXJyaWVyPFVua25vd24+JiBpbkNvbnN0YW50UG9vbCA9IG1fY29kZUJsb2NrLT5jb25zdGFudFJl
Z2lzdGVyKGluZGV4KTsKKyAgICAgICAgY2hhciogYnl0ZVBvaW50ZXIgPSByZWludGVycHJldF9j
YXN0PGNoYXIqPigmaW5Db25zdGFudFBvb2wpOworICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJs
ZShBYnNvbHV0ZUFkZHJlc3MoYnl0ZVBvaW50ZXIgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwg
dS5hc0JpdHMucGF5bG9hZCkpLCB2YWx1ZSk7CisgICAgfSBlbHNlCisgICAgICAgIGNvbnZlcnRJ
bnQzMlRvRG91YmxlKHBheWxvYWRGb3IoaW5kZXgpLCB2YWx1ZSk7Cit9CisKK2lubGluZSB2b2lk
IEpJVDo6ZW1pdFN0b3JlKGludCBpbmRleCwgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5
bG9hZCwgUmVnaXN0ZXJJRCBiYXNlKQoreworICAgIHN0b3JlMzIocGF5bG9hZCwgcGF5bG9hZEZv
cihpbmRleCwgYmFzZSkpOworICAgIHN0b3JlMzIodGFnLCB0YWdGb3IoaW5kZXgsIGJhc2UpKTsK
K30KKworaW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmVJbnQzMihpbnQgaW5kZXgsIFJlZ2lzdGVy
SUQgcGF5bG9hZCwgYm9vbCBpbmRleElzSW50MzIpCit7CisgICAgc3RvcmUzMihwYXlsb2FkLCBw
YXlsb2FkRm9yKGluZGV4LCBjYWxsRnJhbWVSZWdpc3RlcikpOworICAgIGlmICghaW5kZXhJc0lu
dDMyKQorICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHRh
Z0ZvcihpbmRleCwgY2FsbEZyYW1lUmVnaXN0ZXIpKTsKK30KKworaW5saW5lIHZvaWQgSklUOjpl
bWl0U3RvcmVBbmRNYXBJbnQzMihpbnQgaW5kZXgsIFJlZ2lzdGVySUQgdGFnLCBSZWdpc3RlcklE
IHBheWxvYWQsIGJvb2wgaW5kZXhJc0ludDMyLCBzaXplX3Qgb3Bjb2RlTGVuZ3RoKQoreworICAg
IGVtaXRTdG9yZUludDMyKGluZGV4LCBwYXlsb2FkLCBpbmRleElzSW50MzIpOworICAgIG1hcCht
X2J5dGVjb2RlT2Zmc2V0ICsgb3Bjb2RlTGVuZ3RoLCBpbmRleCwgdGFnLCBwYXlsb2FkKTsKK30K
KworaW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmVJbnQzMihpbnQgaW5kZXgsIFRydXN0ZWRJbW0z
MiBwYXlsb2FkLCBib29sIGluZGV4SXNJbnQzMikKK3sKKyAgICBzdG9yZTMyKHBheWxvYWQsIHBh
eWxvYWRGb3IoaW5kZXgsIGNhbGxGcmFtZVJlZ2lzdGVyKSk7CisgICAgaWYgKCFpbmRleElzSW50
MzIpCisgICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgdGFn
Rm9yKGluZGV4LCBjYWxsRnJhbWVSZWdpc3RlcikpOworfQorCitpbmxpbmUgdm9pZCBKSVQ6OmVt
aXRTdG9yZUNlbGwoaW50IGluZGV4LCBSZWdpc3RlcklEIHBheWxvYWQsIGJvb2wgaW5kZXhJc0Nl
bGwpCit7CisgICAgc3RvcmUzMihwYXlsb2FkLCBwYXlsb2FkRm9yKGluZGV4LCBjYWxsRnJhbWVS
ZWdpc3RlcikpOworICAgIGlmICghaW5kZXhJc0NlbGwpCisgICAgICAgIHN0b3JlMzIoVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCB0YWdGb3IoaW5kZXgsIGNhbGxGcmFtZVJlZ2lzdGVy
KSk7Cit9CisKK2lubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlQm9vbChpbnQgaW5kZXgsIFJlZ2lz
dGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzQm9vbCkKK3sKKyAgICBzdG9yZTMyKHBheWxvYWQs
IHBheWxvYWRGb3IoaW5kZXgsIGNhbGxGcmFtZVJlZ2lzdGVyKSk7CisgICAgaWYgKCFpbmRleElz
Qm9vbCkKKyAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qm9vbGVhblRhZyks
IHRhZ0ZvcihpbmRleCwgY2FsbEZyYW1lUmVnaXN0ZXIpKTsKK30KKworaW5saW5lIHZvaWQgSklU
OjplbWl0U3RvcmVEb3VibGUoaW50IGluZGV4LCBGUFJlZ2lzdGVySUQgdmFsdWUpCit7CisgICAg
c3RvcmVEb3VibGUodmFsdWUsIGFkZHJlc3NGb3IoaW5kZXgpKTsKK30KKworaW5saW5lIHZvaWQg
SklUOjplbWl0U3RvcmUoaW50IGluZGV4LCBjb25zdCBKU1ZhbHVlIGNvbnN0YW50LCBSZWdpc3Rl
cklEIGJhc2UpCit7CisgICAgc3RvcmUzMihJbW0zMihjb25zdGFudC5wYXlsb2FkKCkpLCBwYXls
b2FkRm9yKGluZGV4LCBiYXNlKSk7CisgICAgc3RvcmUzMihJbW0zMihjb25zdGFudC50YWcoKSks
IHRhZ0ZvcihpbmRleCwgYmFzZSkpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0
SW5pdFJlZ2lzdGVyKHVuc2lnbmVkIGRzdCkKK3sKKyAgICBlbWl0U3RvcmUoZHN0LCBqc1VuZGVm
aW5lZCgpKTsKK30KKworaW5saW5lIGJvb2wgSklUOjppc0xhYmVsZWQodW5zaWduZWQgYnl0ZWNv
ZGVPZmZzZXQpCit7CisgICAgZm9yIChzaXplX3QgbnVtYmVyT2ZKdW1wVGFyZ2V0cyA9IG1fY29k
ZUJsb2NrLT5udW1iZXJPZkp1bXBUYXJnZXRzKCk7IG1fanVtcFRhcmdldEluZGV4ICE9IG51bWJl
ck9mSnVtcFRhcmdldHM7ICsrbV9qdW1wVGFyZ2V0SW5kZXgpIHsKKyAgICAgICAgdW5zaWduZWQg
anVtcFRhcmdldCA9IG1fY29kZUJsb2NrLT5qdW1wVGFyZ2V0KG1fanVtcFRhcmdldEluZGV4KTsK
KyAgICAgICAgaWYgKGp1bXBUYXJnZXQgPT0gYnl0ZWNvZGVPZmZzZXQpCisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKGp1bXBUYXJnZXQgPiBieXRlY29kZU9mZnNldCkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitp
bmxpbmUgdm9pZCBKSVQ6Om1hcCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgaW50IHZpcnR1YWxS
ZWdpc3RlckluZGV4LCBSZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJRCBwYXlsb2FkKQoreworICAg
IGlmIChpc0xhYmVsZWQoYnl0ZWNvZGVPZmZzZXQpKQorICAgICAgICByZXR1cm47CisKKyAgICBt
X21hcHBlZEJ5dGVjb2RlT2Zmc2V0ID0gYnl0ZWNvZGVPZmZzZXQ7CisgICAgbV9tYXBwZWRWaXJ0
dWFsUmVnaXN0ZXJJbmRleCA9IHZpcnR1YWxSZWdpc3RlckluZGV4OworICAgIG1fbWFwcGVkVGFn
ID0gdGFnOworICAgIG1fbWFwcGVkUGF5bG9hZCA9IHBheWxvYWQ7CisgICAgCisgICAgQVNTRVJU
KCFjYW5CZU9wdGltaXplZCgpIHx8IG1fbWFwcGVkUGF5bG9hZCA9PSByZWdUMCk7CisgICAgQVNT
RVJUKCFjYW5CZU9wdGltaXplZCgpIHx8IG1fbWFwcGVkVGFnID09IHJlZ1QxKTsKK30KKworaW5s
aW5lIHZvaWQgSklUOjp1bm1hcChSZWdpc3RlcklEIHJlZ2lzdGVySUQpCit7CisgICAgaWYgKG1f
bWFwcGVkVGFnID09IHJlZ2lzdGVySUQpCisgICAgICAgIG1fbWFwcGVkVGFnID0gKFJlZ2lzdGVy
SUQpLTE7CisgICAgZWxzZSBpZiAobV9tYXBwZWRQYXlsb2FkID09IHJlZ2lzdGVySUQpCisgICAg
ICAgIG1fbWFwcGVkUGF5bG9hZCA9IChSZWdpc3RlcklEKS0xOworfQorCitpbmxpbmUgdm9pZCBK
SVQ6OnVubWFwKCkKK3sKKyAgICBtX21hcHBlZEJ5dGVjb2RlT2Zmc2V0ID0gKHVuc2lnbmVkKS0x
OworICAgIG1fbWFwcGVkVmlydHVhbFJlZ2lzdGVySW5kZXggPSBKU1N0YWNrOjpSZXR1cm5QQzsK
KyAgICBtX21hcHBlZFRhZyA9IChSZWdpc3RlcklEKS0xOworICAgIG1fbWFwcGVkUGF5bG9hZCA9
IChSZWdpc3RlcklEKS0xOworfQorCitpbmxpbmUgYm9vbCBKSVQ6OmlzTWFwcGVkKGludCB2aXJ0
dWFsUmVnaXN0ZXJJbmRleCkKK3sKKyAgICBpZiAobV9tYXBwZWRCeXRlY29kZU9mZnNldCAhPSBt
X2J5dGVjb2RlT2Zmc2V0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fbWFwcGVk
VmlydHVhbFJlZ2lzdGVySW5kZXggIT0gdmlydHVhbFJlZ2lzdGVySW5kZXgpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworaW5saW5lIGJvb2wgSklUOjpnZXRN
YXBwZWRQYXlsb2FkKGludCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCwgUmVnaXN0ZXJJRCYgcGF5bG9h
ZCkKK3sKKyAgICBpZiAobV9tYXBwZWRCeXRlY29kZU9mZnNldCAhPSBtX2J5dGVjb2RlT2Zmc2V0
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fbWFwcGVkVmlydHVhbFJlZ2lzdGVy
SW5kZXggIT0gdmlydHVhbFJlZ2lzdGVySW5kZXgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBpZiAobV9tYXBwZWRQYXlsb2FkID09IChSZWdpc3RlcklEKS0xKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgcGF5bG9hZCA9IG1fbWFwcGVkUGF5bG9hZDsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworaW5saW5lIGJvb2wgSklUOjpnZXRNYXBwZWRUYWcoaW50IHZpcnR1YWxSZWdpc3Rlcklu
ZGV4LCBSZWdpc3RlcklEJiB0YWcpCit7CisgICAgaWYgKG1fbWFwcGVkQnl0ZWNvZGVPZmZzZXQg
IT0gbV9ieXRlY29kZU9mZnNldCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX21h
cHBlZFZpcnR1YWxSZWdpc3RlckluZGV4ICE9IHZpcnR1YWxSZWdpc3RlckluZGV4KQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fbWFwcGVkVGFnID09IChSZWdpc3RlcklEKS0xKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgdGFnID0gbV9tYXBwZWRUYWc7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2lubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KGludCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCkKK3sKKyAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tu
b3duTm90SW1tZWRpYXRlKHZpcnR1YWxSZWdpc3RlckluZGV4KSkgeworICAgICAgICBpZiAobV9j
b2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHZpcnR1YWxSZWdpc3RlckluZGV4KSkK
KyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIGFkZFNsb3dDYXNlKGVtaXRKdW1wSWZOb3RKU0NlbGwodmlydHVhbFJlZ2lzdGVySW5kZXgp
KTsKKyAgICB9Cit9CisKK2lubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKGludCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCwgUmVnaXN0ZXJJRCB0YWcpCit7CisgICAgaWYg
KCFtX2NvZGVCbG9jay0+aXNLbm93bk5vdEltbWVkaWF0ZSh2aXJ0dWFsUmVnaXN0ZXJJbmRleCkp
IHsKKyAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleCh2aXJ0
dWFsUmVnaXN0ZXJJbmRleCkpCisgICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgdGFn
LCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpKTsKKyAgICB9Cit9CisKK0FMV0FZU19J
TkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50SW1tZWRpYXRlSW50KHVuc2lnbmVkIHNy
YykKK3sKKyAgICByZXR1cm4gbV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHNy
YykgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOworfQorCitBTFdBWVNfSU5M
SU5FIGJvb2wgSklUOjpnZXRPcGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVJbnQodW5zaWduZWQgb3Ax
LCB1bnNpZ25lZCBvcDIsIHVuc2lnbmVkJiBvcCwgaW50MzJfdCYgY29uc3RhbnQpCit7CisgICAg
aWYgKGlzT3BlcmFuZENvbnN0YW50SW1tZWRpYXRlSW50KG9wMSkpIHsKKyAgICAgICAgY29uc3Rh
bnQgPSBnZXRDb25zdGFudE9wZXJhbmQob3AxKS5hc0ludDMyKCk7CisgICAgICAgIG9wID0gb3Ay
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoaXNPcGVyYW5kQ29uc3Rh
bnRJbW1lZGlhdGVJbnQob3AyKSkgeworICAgICAgICBjb25zdGFudCA9IGdldENvbnN0YW50T3Bl
cmFuZChvcDIpLmFzSW50MzIoKTsKKyAgICAgICAgb3AgPSBvcDE7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKyNlbHNlIC8vIFVTRShK
U1ZBTFVFMzJfNjQpCisKKy8qIERlcHJlY2F0ZWQ6IFBsZWFzZSB1c2UgSklUU3R1YkNhbGwgaW5z
dGVhZC4gKi8KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldEpJVFN0dWJBcmcodW5z
aWduZWQgYXJndW1lbnROdW1iZXIsIFJlZ2lzdGVySUQgZHN0KQoreworICAgIHVuc2lnbmVkIGFy
Z3VtZW50U3RhY2tPZmZzZXQgPSAoYXJndW1lbnROdW1iZXIgKiAoc2l6ZW9mKEpTVmFsdWUpIC8g
c2l6ZW9mKHZvaWQqKSkpICsgSklUU1RBQ0tGUkFNRV9BUkdTX0lOREVYOworICAgIHBlZWs2NChk
c3QsIGFyZ3VtZW50U3RhY2tPZmZzZXQpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpr
aWxsTGFzdFJlc3VsdFJlZ2lzdGVyKCkKK3sKKyAgICBtX2xhc3RSZXN1bHRCeXRlY29kZVJlZ2lz
dGVyID0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKTsKK30KKworLy8gZ2V0IGFyZyBw
dXRzIGFuIGFyZyBmcm9tIHRoZSBTRiByZWdpc3RlciBhcnJheSBpbnRvIGEgaC93IHJlZ2lzdGVy
CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGludCBzcmMs
IFJlZ2lzdGVySUQgZHN0KQoreworICAgIEFTU0VSVChtX2J5dGVjb2RlT2Zmc2V0ICE9ICh1bnNp
Z25lZCktMSk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90
L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVPZmZzZXQgaXMgc2V0Lgor
CisgICAgLy8gVE9ETzogd2Ugd2FudCB0byByZXVzZSB2YWx1ZXMgdGhhdCBhcmUgYWxyZWFkeSBp
biByZWdpc3RlcnMgaWYgd2UgY2FuIC0gYWRkIGEgcmVnaXN0ZXIgYWxsb2NhdG9yIQorICAgIGlm
IChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoc3JjKSkgeworICAgICAgICBK
U1ZhbHVlIHZhbHVlID0gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CisgICAgICAgIGlm
ICghdmFsdWUuaXNOdW1iZXIoKSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFs
dWU6OmVuY29kZSh2YWx1ZSkpLCBkc3QpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtb3Zl
KEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBkc3QpOworICAgICAgICBraWxsTGFzdFJl
c3VsdFJlZ2lzdGVyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoc3JjID09
IG1fbGFzdFJlc3VsdEJ5dGVjb2RlUmVnaXN0ZXIgJiYgbV9jb2RlQmxvY2stPmlzVGVtcG9yYXJ5
UmVnaXN0ZXJJbmRleChzcmMpICYmICFhdEp1bXBUYXJnZXQoKSkgeworICAgICAgICAvLyBUaGUg
YXJndW1lbnQgd2Ugd2FudCBpcyBhbHJlYWR5IHN0b3JlZCBpbiBlYXgKKyAgICAgICAgaWYgKGRz
dCAhPSBjYWNoZWRSZXN1bHRSZWdpc3RlcikKKyAgICAgICAgICAgIG1vdmUoY2FjaGVkUmVzdWx0
UmVnaXN0ZXIsIGRzdCk7CisgICAgICAgIGtpbGxMYXN0UmVzdWx0UmVnaXN0ZXIoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGxvYWQ2NChBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVy
LCBzcmMgKiBzaXplb2YoUmVnaXN0ZXIpKSwgZHN0KTsKKyAgICBraWxsTGFzdFJlc3VsdFJlZ2lz
dGVyKCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXJzKGludCBzcmMxLCBSZWdpc3RlcklEIGRzdDEsIGludCBzcmMyLCBSZWdpc3RlcklEIGRzdDIp
Cit7CisgICAgaWYgKHNyYzIgPT0gbV9sYXN0UmVzdWx0Qnl0ZWNvZGVSZWdpc3RlcikgeworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzIsIGRzdDIpOworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNyYzEsIGRzdDEpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgZHN0MSk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc3JjMiwgZHN0Mik7CisgICAgfQorfQorCitBTFdBWVNfSU5MSU5FIGludDMyX3QgSklU
OjpnZXRDb25zdGFudE9wZXJhbmRJbW1lZGlhdGVJbnQodW5zaWduZWQgc3JjKQoreworICAgIHJl
dHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5hc0ludDMyKCk7Cit9CisKK0FMV0FZU19JTkxJ
TkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50SW1tZWRpYXRlSW50KHVuc2lnbmVkIHNyYykK
K3sKKyAgICByZXR1cm4gbV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHNyYykg
JiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOworfQorCitBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHVuc2lnbmVkIGRzdCwgUmVnaXN0ZXJJ
RCBmcm9tKQoreworICAgIHN0b3JlNjQoZnJvbSwgQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rlciwg
ZHN0ICogc2l6ZW9mKFJlZ2lzdGVyKSkpOworICAgIG1fbGFzdFJlc3VsdEJ5dGVjb2RlUmVnaXN0
ZXIgPSAoZnJvbSA9PSBjYWNoZWRSZXN1bHRSZWdpc3RlcikgPyBzdGF0aWNfY2FzdDxpbnQ+KGRz
dCkgOiBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpOworfQorCitBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjplbWl0SW5pdFJlZ2lzdGVyKHVuc2lnbmVkIGRzdCkKK3sKKyAgICBzdG9yZTY0
KFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpLCBBZGRyZXNzKGNh
bGxGcmFtZVJlZ2lzdGVyLCBkc3QgKiBzaXplb2YoUmVnaXN0ZXIpKSk7Cit9CisKK0FMV0FZU19J
TkxJTkUgSklUOjpKdW1wIEpJVDo6ZW1pdEp1bXBJZkpTQ2VsbChSZWdpc3RlcklEIHJlZykKK3sK
KyAgICByZXR1cm4gYnJhbmNoVGVzdDY0KFplcm8sIHJlZywgdGFnTWFza1JlZ2lzdGVyKTsKK30K
KworQUxXQVlTX0lOTElORSBKSVQ6Okp1bXAgSklUOjplbWl0SnVtcElmQm90aEpTQ2VsbHMoUmVn
aXN0ZXJJRCByZWcxLCBSZWdpc3RlcklEIHJlZzIsIFJlZ2lzdGVySUQgc2NyYXRjaCkKK3sKKyAg
ICBtb3ZlKHJlZzEsIHNjcmF0Y2gpOworICAgIG9yNjQocmVnMiwgc2NyYXRjaCk7CisgICAgcmV0
dXJuIGVtaXRKdW1wSWZKU0NlbGwoc2NyYXRjaCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZkpTQ2VsbChSZWdpc3RlcklEIHJlZykKK3sKKyAgICBhZGRT
bG93Q2FzZShlbWl0SnVtcElmSlNDZWxsKHJlZykpOworfQorCitBTFdBWVNfSU5MSU5FIEpJVDo6
SnVtcCBKSVQ6OmVtaXRKdW1wSWZOb3RKU0NlbGwoUmVnaXN0ZXJJRCByZWcpCit7CisgICAgcmV0
dXJuIGJyYW5jaFRlc3Q2NChOb25aZXJvLCByZWcsIHRhZ01hc2tSZWdpc3Rlcik7Cit9CisKK0FM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChSZWdpc3Rl
cklEIHJlZykKK3sKKyAgICBhZGRTbG93Q2FzZShlbWl0SnVtcElmTm90SlNDZWxsKHJlZykpOwor
fQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
UmVnaXN0ZXJJRCByZWcsIGludCB2UmVnKQoreworICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25v
d25Ob3RJbW1lZGlhdGUodlJlZykpCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChyZWcpOworfQorCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkRG91YmxlKGludCBpbmRleCwg
RlBSZWdpc3RlcklEIHZhbHVlKQoreworICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJl
Z2lzdGVySW5kZXgoaW5kZXgpKSB7CisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgaW5D
b25zdGFudFBvb2wgPSBtX2NvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihpbmRleCk7CisgICAg
ICAgIGxvYWREb3VibGUoJmluQ29uc3RhbnRQb29sLCB2YWx1ZSk7CisgICAgfSBlbHNlCisgICAg
ICAgIGxvYWREb3VibGUoYWRkcmVzc0ZvcihpbmRleCksIHZhbHVlKTsKK30KKworaW5saW5lIHZv
aWQgSklUOjplbWl0TG9hZEludDMyVG9Eb3VibGUoaW50IGluZGV4LCBGUFJlZ2lzdGVySUQgdmFs
dWUpCit7CisgICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbmRl
eCkpIHsKKyAgICAgICAgQVNTRVJUKGlzT3BlcmFuZENvbnN0YW50SW1tZWRpYXRlSW50KGluZGV4
KSk7CisgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKEltbTMyKGdldENvbnN0YW50T3BlcmFu
ZChpbmRleCkuYXNJbnQzMigpKSwgdmFsdWUpOworICAgIH0gZWxzZQorICAgICAgICBjb252ZXJ0
SW50MzJUb0RvdWJsZShhZGRyZXNzRm9yKGluZGV4KSwgdmFsdWUpOworfQorCitBTFdBWVNfSU5M
SU5FIEpJVDo6SnVtcCBKSVQ6OmVtaXRKdW1wSWZJbW1lZGlhdGVJbnRlZ2VyKFJlZ2lzdGVySUQg
cmVnKQoreworICAgIHJldHVybiBicmFuY2g2NChBYm92ZU9yRXF1YWwsIHJlZywgdGFnVHlwZU51
bWJlclJlZ2lzdGVyKTsKK30KKworQUxXQVlTX0lOTElORSBKSVQ6Okp1bXAgSklUOjplbWl0SnVt
cElmTm90SW1tZWRpYXRlSW50ZWdlcihSZWdpc3RlcklEIHJlZykKK3sKKyAgICByZXR1cm4gYnJh
bmNoNjQoQmVsb3csIHJlZywgdGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKK30KKworQUxXQVlTX0lO
TElORSBKSVQ6Okp1bXAgSklUOjplbWl0SnVtcElmTm90SW1tZWRpYXRlSW50ZWdlcnMoUmVnaXN0
ZXJJRCByZWcxLCBSZWdpc3RlcklEIHJlZzIsIFJlZ2lzdGVySUQgc2NyYXRjaCkKK3sKKyAgICBt
b3ZlKHJlZzEsIHNjcmF0Y2gpOworICAgIGFuZDY0KHJlZzIsIHNjcmF0Y2gpOworICAgIHJldHVy
biBlbWl0SnVtcElmTm90SW1tZWRpYXRlSW50ZWdlcihzY3JhdGNoKTsKK30KKworQUxXQVlTX0lO
TElORSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tZWRpYXRlSW50ZWdlcihSZWdp
c3RlcklEIHJlZykKK3sKKyAgICBhZGRTbG93Q2FzZShlbWl0SnVtcElmTm90SW1tZWRpYXRlSW50
ZWdlcihyZWcpKTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SW1tZWRpYXRlSW50ZWdlcnMoUmVnaXN0ZXJJRCByZWcxLCBSZWdpc3RlcklEIHJlZzIs
IFJlZ2lzdGVySUQgc2NyYXRjaCkKK3sKKyAgICBhZGRTbG93Q2FzZShlbWl0SnVtcElmTm90SW1t
ZWRpYXRlSW50ZWdlcnMocmVnMSwgcmVnMiwgc2NyYXRjaCkpOworfQorCitBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1lZGlhdGVOdW1iZXIoUmVnaXN0ZXJJ
RCByZWcpCit7CisgICAgYWRkU2xvd0Nhc2UoZW1pdEp1bXBJZk5vdEltbWVkaWF0ZU51bWJlcihy
ZWcpKTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEZhc3RBcml0aFJlVGFnSW1t
ZWRpYXRlKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCit7CisgICAgZW1pdEZhc3RB
cml0aEludFRvSW1tTm9DaGVjayhzcmMsIGRlc3QpOworfQorCisvLyBvcGVyYW5kIGlzIGludDMy
X3QsIG11c3QgaGF2ZSBiZWVuIHplcm8tZXh0ZW5kZWQgaWYgcmVnaXN0ZXIgaXMgNjQtYml0Lgor
QUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEZhc3RBcml0aEludFRvSW1tTm9DaGVjayhSZWdp
c3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQoreworICAgIGlmIChzcmMgIT0gZGVzdCkKKyAg
ICAgICAgbW92ZShzcmMsIGRlc3QpOworICAgIG9yNjQodGFnVHlwZU51bWJlclJlZ2lzdGVyLCBk
ZXN0KTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFRhZ0FzQm9vbEltbWVkaWF0
ZShSZWdpc3RlcklEIHJlZykKK3sKKyAgICBvcjMyKFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxp
bnQzMl90PihWYWx1ZUZhbHNlKSksIHJlZyk7Cit9CisKKyNlbmRpZiAvLyBVU0UoSlNWQUxVRTMy
XzY0KQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShKSVQpCisKKyNl
bmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHJldmlzaW9u
IDEzMzk2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMyw4ICsyMyw4IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZu
ZGVmIEpJVElubGluZU1ldGhvZHNfaAotI2RlZmluZSBKSVRJbmxpbmVNZXRob2RzX2gKKyNpZm5k
ZWYgSklUSW5saW5lc19oCisjZGVmaW5lIEpJVElubGluZXNfaAogCiAKICNpZiBFTkFCTEUoSklU
KQpAQCAtMTAwNCw0ICsxMDA0LDUgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFRhZ0Fz
Qm9vbEltbQogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIAotI2VuZGlmCisjZW5kaWYgLy8gSklU
SW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMy
XzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29k
ZXMzMl82NC5jcHAJKHJldmlzaW9uIDEzMzk3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3Bjb2RlczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAog
I2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAjaW5jbHVkZSAiSklULmgiCiAKLSNpbmNsdWRlICJKSVRJ
bmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiSklUSW5saW5lcy5oIgogI2luY2x1ZGUgIkpJVFN0
dWJDYWxsLmgiCiAjaW5jbHVkZSAiSlNBcnJheS5oIgogI2luY2x1ZGUgIkpTQ2VsbC5oIgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAxMzM5
NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yOSw5ICsyOSw5IEBACiAjaW5jbHVkZSAiSklULmgiCiAKICNpbmNsdWRlICJB
cmd1bWVudHMuaCIKLSNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaCIKKyNpbmNs
dWRlICJDb3BpZWRTcGFjZUlubGluZXMuaCIKICNpbmNsdWRlICJIZWFwLmgiCi0jaW5jbHVkZSAi
SklUSW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkpJVElubGluZXMuaCIKICNpbmNsdWRlICJK
SVRTdHViQ2FsbC5oIgogI2luY2x1ZGUgIkpTQXJyYXkuaCIKICNpbmNsdWRlICJKU0NlbGwuaCIK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFj
Y2VzczMyXzY0LmNwcAkocmV2aXNpb24gMTMzOTczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyAr
MzIsNyBAQAogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkdDQXdhcmVKSVRTdHVi
Um91dGluZS5oIgogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCi0jaW5jbHVkZSAiSklUSW5saW5l
TWV0aG9kcy5oIgorI2luY2x1ZGUgIkpJVElubGluZXMuaCIKICNpbmNsdWRlICJKSVRTdHViQ2Fs
bC5oIgogI2luY2x1ZGUgIkpTQXJyYXkuaCIKICNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAko
cmV2aXNpb24gMTMzOTczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0
eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlICJH
Q0F3YXJlSklUU3R1YlJvdXRpbmUuaCIKICNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKICNpbmNs
dWRlICJJbnRlcnByZXRlci5oIgotI2luY2x1ZGUgIkpJVElubGluZU1ldGhvZHMuaCIKKyNpbmNs
dWRlICJKSVRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSklUU3R1YkNhbGwuaCIKICNpbmNsdWRlICJK
U0FycmF5LmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQXJyYXlDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDEz
Mzk3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5Q29uc3RydWN0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw4ICsyNSw4IEBACiAjaW5jbHVkZSAiQXJyYXlDb25z
dHJ1Y3Rvci5oIgogCiAjaW5jbHVkZSAiQXJyYXlQcm90b3R5cGUuaCIKLSNpbmNsdWRlICJCdXR0
ZXJmbHlJbmxpbmVNZXRob2RzLmgiCi0jaW5jbHVkZSAiQ29waWVkU3BhY2VJbmxpbmVNZXRob2Rz
LmgiCisjaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lcy5oIgorI2luY2x1ZGUgIkNvcGllZFNwYWNl
SW5saW5lcy5oIgogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uSGVscGVy
cy5oIgogI2luY2x1ZGUgIkpTQXJyYXkuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDEzMzk3MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjQsMTAgKzI0LDEwIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
QXJyYXlQcm90b3R5cGUuaCIKIAotI2luY2x1ZGUgIkJ1dHRlcmZseUlubGluZU1ldGhvZHMuaCIK
KyNpbmNsdWRlICJCdXR0ZXJmbHlJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ2FjaGVkQ2FsbC5oIgog
I2luY2x1ZGUgIkNvZGVCbG9jay5oIgotI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lTWV0aG9k
cy5oIgorI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lcy5oIgogI2luY2x1ZGUgIkludGVycHJl
dGVyLmgiCiAjaW5jbHVkZSAiSklULmgiCiAjaW5jbHVkZSAiSlNTdHJpbmdCdWlsZGVyLmgiCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVNZXRob2Rz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5
SW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAxMzM5NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
MTgwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8K
LQotI2lmbmRlZiBCdXR0ZXJmbHlJbmxpbmVNZXRob2RzX2gKLSNkZWZpbmUgQnV0dGVyZmx5SW5s
aW5lTWV0aG9kc19oCi0KLSNpbmNsdWRlICJBcnJheVN0b3JhZ2UuaCIKLSNpbmNsdWRlICJCdXR0
ZXJmbHkuaCIKLSNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaCIKLSNpbmNsdWRl
ICJDb3B5VmlzaXRvci5oIgotI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgotI2luY2x1ZGUgIlN0
cnVjdHVyZS5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotaW5saW5lIEJ1dHRlcmZseSogQnV0dGVy
Zmx5OjpjcmVhdGVVbmluaXRpYWxpemVkKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90
IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRleGluZ0hl
YWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQotewotICAgIHZvaWQqIHRl
bXA7Ci0gICAgc2l6ZV90IHNpemUgPSB0b3RhbFNpemUocHJlQ2FwYWNpdHksIHByb3BlcnR5Q2Fw
YWNpdHksIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Ci0g
ICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKHNpemUsICZ0ZW1wKSkK
LSAgICAgICAgQ1JBU0goKTsKLSAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IGZyb21CYXNlKHRlbXAs
IHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5KTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQot
Ci1pbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wg
aGFzSW5kZXhpbmdIZWFkZXIsIGNvbnN0IEluZGV4aW5nSGVhZGVyJiBpbmRleGluZ0hlYWRlciwg
c2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQotewotICAgIEJ1dHRlcmZseSogcmVz
dWx0ID0gY3JlYXRlVW5pbml0aWFsaXplZCgKLSAgICAgICAgZ2xvYmFsRGF0YSwgcHJlQ2FwYWNp
dHksIHByb3BlcnR5Q2FwYWNpdHksIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRT
aXplSW5CeXRlcyk7Ci0gICAgaWYgKGhhc0luZGV4aW5nSGVhZGVyKQotICAgICAgICAqcmVzdWx0
LT5pbmRleGluZ0hlYWRlcigpID0gaW5kZXhpbmdIZWFkZXI7Ci0gICAgcmV0dXJuIHJlc3VsdDsK
LX0KLQotaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGUoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLXsKLSAgICByZXR1cm4gY3JlYXRlKGds
b2JhbERhdGEsIDAsIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgaGFzSW5kZXhpbmdI
ZWFkZXIoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSksIEluZGV4aW5nSGVhZGVyKCksIDApOwot
fQotCi1pbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWREdXJp
bmdDb2xsZWN0aW9uKENvcHlWaXNpdG9yJiB2aXNpdG9yLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNp
emVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5k
ZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCi17Ci0gICAgc2l6ZV90IHNpemUgPSB0b3RhbFNpemUo
cHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHksIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGlu
Z1BheWxvYWRTaXplSW5CeXRlcyk7Ci0gICAgQnV0dGVyZmx5KiByZXN1bHQgPSBmcm9tQmFzZSgK
LSAgICAgICAgdmlzaXRvci5hbGxvY2F0ZU5ld1NwYWNlKHNpemUpLAotICAgICAgICBwcmVDYXBh
Y2l0eSwgcHJvcGVydHlDYXBhY2l0eSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotaW5saW5l
IHZvaWQqIEJ1dHRlcmZseTo6YmFzZShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLXsKLSAgICByZXR1
cm4gYmFzZShpbmRleGluZ0hlYWRlcigpLT5wcmVDYXBhY2l0eShzdHJ1Y3R1cmUpLCBzdHJ1Y3R1
cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOwotfQotCi1pbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJm
bHk6Omdyb3dQcm9wZXJ0eVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3Qg
cHJlQ2FwYWNpdHksIHNpemVfdCBvbGRQcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5n
SGVhZGVyLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdQcm9w
ZXJ0eUNhcGFjaXR5KQotewotICAgIEFTU0VSVChuZXdQcm9wZXJ0eUNhcGFjaXR5ID4gb2xkUHJv
cGVydHlDYXBhY2l0eSk7Ci0gICAgQnV0dGVyZmx5KiByZXN1bHQgPSBjcmVhdGVVbmluaXRpYWxp
emVkKAotICAgICAgICBnbG9iYWxEYXRhLCBwcmVDYXBhY2l0eSwgbmV3UHJvcGVydHlDYXBhY2l0
eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKLSAgICBt
ZW1jcHkoCi0gICAgICAgIHJlc3VsdC0+cHJvcGVydHlTdG9yYWdlKCkgLSBvbGRQcm9wZXJ0eUNh
cGFjaXR5LAotICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UoKSAtIG9sZFByb3BlcnR5Q2FwYWNpdHks
Ci0gICAgICAgIHRvdGFsU2l6ZSgwLCBvbGRQcm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hl
YWRlciwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpKTsKLSAgICByZXR1cm4gcmVzdWx0Owot
fQotCi1pbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6Omdyb3dQcm9wZXJ0eVN0b3JhZ2UoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IG9sZFBy
b3BlcnR5Q2FwYWNpdHksIHNpemVfdCBuZXdQcm9wZXJ0eUNhcGFjaXR5KQotewotICAgIHJldHVy
biBncm93UHJvcGVydHlTdG9yYWdlKAotICAgICAgICBnbG9iYWxEYXRhLCBpbmRleGluZ0hlYWRl
cigpLT5wcmVDYXBhY2l0eShzdHJ1Y3R1cmUpLCBvbGRQcm9wZXJ0eUNhcGFjaXR5LAotICAgICAg
ICBoYXNJbmRleGluZ0hlYWRlcihzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSwKLSAgICAgICAg
aW5kZXhpbmdIZWFkZXIoKS0+aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMoc3RydWN0dXJlKSwg
bmV3UHJvcGVydHlDYXBhY2l0eSk7Ci19Ci0KLWlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6
Z3Jvd1Byb3BlcnR5U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSog
b2xkU3RydWN0dXJlLCBzaXplX3QgbmV3UHJvcGVydHlDYXBhY2l0eSkKLXsKLSAgICByZXR1cm4g
Z3Jvd1Byb3BlcnR5U3RvcmFnZSgKLSAgICAgICAgZ2xvYmFsRGF0YSwgb2xkU3RydWN0dXJlLCBv
bGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCksIG5ld1Byb3BlcnR5Q2FwYWNpdHkpOwot
fQotCi1pbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6Omdyb3dBcnJheVJpZ2h0KEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIHNpemVfdCBwcm9wZXJ0
eUNhcGFjaXR5LCBib29sIGhhZEluZGV4aW5nSGVhZGVyLCBzaXplX3Qgb2xkSW5kZXhpbmdQYXls
b2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKLXsK
LSAgICBBU1NFUlRfVU5VU0VEKG9sZFN0cnVjdHVyZSwgIWluZGV4aW5nSGVhZGVyKCktPnByZUNh
cGFjaXR5KG9sZFN0cnVjdHVyZSkpOwotICAgIEFTU0VSVF9VTlVTRUQob2xkU3RydWN0dXJlLCBo
YWRJbmRleGluZ0hlYWRlciA9PSBoYXNJbmRleGluZ0hlYWRlcihvbGRTdHJ1Y3R1cmUtPmluZGV4
aW5nVHlwZSgpKSk7Ci0gICAgdm9pZCogdGhlQmFzZSA9IGJhc2UoMCwgcHJvcGVydHlDYXBhY2l0
eSk7Ci0gICAgc2l6ZV90IG9sZFNpemUgPSB0b3RhbFNpemUoMCwgcHJvcGVydHlDYXBhY2l0eSwg
aGFkSW5kZXhpbmdIZWFkZXIsIG9sZEluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKLSAgICBz
aXplX3QgbmV3U2l6ZSA9IHRvdGFsU2l6ZSgwLCBwcm9wZXJ0eUNhcGFjaXR5LCB0cnVlLCBuZXdJ
bmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Ci0gICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5
UmVhbGxvY2F0ZVN0b3JhZ2UoJnRoZUJhc2UsIG9sZFNpemUsIG5ld1NpemUpKQotICAgICAgICBy
ZXR1cm4gMDsKLSAgICByZXR1cm4gZnJvbUJhc2UodGhlQmFzZSwgMCwgcHJvcGVydHlDYXBhY2l0
eSk7Ci19Ci0KLWlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Z3Jvd0FycmF5UmlnaHQoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgc2l6ZV90IG5l
d0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQotewotICAgIHJldHVybiBncm93QXJyYXlSaWdo
dCgKLSAgICAgICAgZ2xvYmFsRGF0YSwgb2xkU3RydWN0dXJlLCBvbGRTdHJ1Y3R1cmUtPm91dE9m
TGluZUNhcGFjaXR5KCksCi0gICAgICAgIGhhc0luZGV4aW5nSGVhZGVyKG9sZFN0cnVjdHVyZS0+
aW5kZXhpbmdUeXBlKCkpLAotICAgICAgICBpbmRleGluZ0hlYWRlcigpLT5pbmRleGluZ1BheWxv
YWRTaXplSW5CeXRlcyhvbGRTdHJ1Y3R1cmUpLCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRl
cyk7Ci19Ci0KLWlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6cmVzaXplQXJyYXkoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBvbGRIYXNJ
bmRleGluZ0hlYWRlciwgc2l6ZV90IG9sZEluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzLCBzaXpl
X3QgbmV3UHJlQ2FwYWNpdHksIGJvb2wgbmV3SGFzSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBuZXdJ
bmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKLXsKLSAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IGNy
ZWF0ZVVuaW5pdGlhbGl6ZWQoCi0gICAgICAgIGdsb2JhbERhdGEsIG5ld1ByZUNhcGFjaXR5LCBw
cm9wZXJ0eUNhcGFjaXR5LCBuZXdIYXNJbmRleGluZ0hlYWRlciwgbmV3SW5kZXhpbmdQYXlsb2Fk
U2l6ZUluQnl0ZXMpOwotICAgIC8vIEZJWE1FOiBUaGlzIGNvdWxkIGJlIG1hZGUgbXVjaCBtb3Jl
IGVmZmljaWVudCBpZiB3ZSB1c2VkIHRoZSBwcm9wZXJ0eSBzaXplLAotICAgIC8vIG5vdCB0aGUg
Y2FwYWNpdHkuCi0gICAgdm9pZCogdG8gPSByZXN1bHQtPnByb3BlcnR5U3RvcmFnZSgpIC0gcHJv
cGVydHlDYXBhY2l0eTsKLSAgICB2b2lkKiBmcm9tID0gcHJvcGVydHlTdG9yYWdlKCkgLSBwcm9w
ZXJ0eUNhcGFjaXR5OwotICAgIHNpemVfdCBzaXplID0gc3RkOjptaW4oCi0gICAgICAgIHRvdGFs
U2l6ZSgwLCBwcm9wZXJ0eUNhcGFjaXR5LCBvbGRIYXNJbmRleGluZ0hlYWRlciwgb2xkSW5kZXhp
bmdQYXlsb2FkU2l6ZUluQnl0ZXMpLAotICAgICAgICB0b3RhbFNpemUoMCwgcHJvcGVydHlDYXBh
Y2l0eSwgbmV3SGFzSW5kZXhpbmdIZWFkZXIsIG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVz
KSk7Ci0gICAgbWVtY3B5KHRvLCBmcm9tLCBzaXplKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQot
Ci1pbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OnJlc2l6ZUFycmF5KEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBuZXdQcmVDYXBhY2l0eSwg
c2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQotewotICAgIGJvb2wgaGFzSW5k
ZXhpbmdIZWFkZXIgPSBKU0M6Omhhc0luZGV4aW5nSGVhZGVyKHN0cnVjdHVyZS0+aW5kZXhpbmdU
eXBlKCkpOwotICAgIHJldHVybiByZXNpemVBcnJheSgKLSAgICAgICAgZ2xvYmFsRGF0YSwgc3Ry
dWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBoYXNJbmRleGluZ0hlYWRlciwKLSAgICAgICAg
aW5kZXhpbmdIZWFkZXIoKS0+aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMoc3RydWN0dXJlKSwg
bmV3UHJlQ2FwYWNpdHksCi0gICAgICAgIGhhc0luZGV4aW5nSGVhZGVyLCBuZXdJbmRleGluZ1Bh
eWxvYWRTaXplSW5CeXRlcyk7Ci19Ci0KLWlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6dW5z
aGlmdChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IG51bWJlck9mU2xvdHMpCi17Ci0gICAg
QVNTRVJUKGhhc0FycmF5U3RvcmFnZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSk7Ci0gICAg
QVNTRVJUKG51bWJlck9mU2xvdHMgPD0gaW5kZXhpbmdIZWFkZXIoKS0+cHJlQ2FwYWNpdHkoc3Ry
dWN0dXJlKSk7Ci0gICAgdW5zaWduZWQgcHJvcGVydHlDYXBhY2l0eSA9IHN0cnVjdHVyZS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKTsKLSAgICAvLyBGSVhNRTogSXQgd291bGQgcHJvYmFibHkgYmUgd2lz
ZSB0byByZXdyaXRlIHRoaXMgYXMgYSBsb29wIHNpbmNlICgxKSB3ZSBrbm93IGluIHdoaWNoCi0g
ICAgLy8gZGlyZWN0aW9uIHdlJ3JlIG1vdmluZyBtZW1vcnkgc28gd2UgZG9uJ3QgbmVlZCB0aGUg
ZXh0cmEgY2hlY2sgb2YgbWVtbW92ZSBhbmQgKDIpIHdlJ3JlCi0gICAgLy8gbW92aW5nIGEgc21h
bGwgYW1vdW50IG9mIG1lbW9yeSBpbiB0aGUgY29tbW9uIGNhc2Ugc28gdGhlIHRocm91Z2hwdXQg
b2YgbWVtbW92ZSB3b24ndAotICAgIC8vIGFtb3J0aXplIHRoZSBvdmVyaGVhZCBvZiBjYWxsaW5n
IGl0LiBBbmQgbm8sIHdlIGNhbm5vdCByZWx5IG9uIHRoZSBDKysgY29tcGlsZXIgdG8KLSAgICAv
LyBpbmxpbmUgbWVtbW92ZSAocGFydGljdWxhcmx5IHNpbmNlIHRoZSBzaXplIGFyZ3VtZW50IGlz
IGxpa2VseSB0byBiZSB2YXJpYWJsZSksIG5vciBjYW4KLSAgICAvLyB3ZSByZWx5IG9uIHRoZSBj
b21waWxlciB0byByZWNvZ25pemUgdGhlIG9yZGVyaW5nIG9mIHRoZSBwb2ludGVyIGFyZ3VtZW50
cyAoc2luY2UKLSAgICAvLyBwcm9wZXJ0eUNhcGFjaXR5IGlzIHZhcmlhYmxlIGFuZCBjb3VsZCBj
YXVzZSB3cmFwLWFyb3VuZCBhcyBmYXIgYXMgdGhlIGNvbXBpbGVyIGtub3dzKS4KLSAgICBtZW1t
b3ZlKAotICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UoKSAtIG51bWJlck9mU2xvdHMgLSBwcm9wZXJ0
eUNhcGFjaXR5LAotICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5Q2FwYWNpdHks
Ci0gICAgICAgIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiBwcm9wZXJ0eUNhcGFjaXR5ICsgc2l6
ZW9mKEluZGV4aW5nSGVhZGVyKSArIEFycmF5U3RvcmFnZTo6c2l6ZUZvcigwKSk7Ci0gICAgcmV0
dXJuIEluZGV4aW5nSGVhZGVyOjpmcm9tRW5kT2YocHJvcGVydHlTdG9yYWdlKCkgLSBudW1iZXJP
ZlNsb3RzKS0+YnV0dGVyZmx5KCk7Ci19Ci0KLWlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6
c2hpZnQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBudW1iZXJPZlNsb3RzKQotewotICAg
IEFTU0VSVChoYXNBcnJheVN0b3JhZ2Uoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpOwotICAg
IHVuc2lnbmVkIHByb3BlcnR5Q2FwYWNpdHkgPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5
KCk7Ci0gICAgLy8gRklYTUU6IFNlZSBjb21tZW50IGluIHVuc2hpZnQoKSwgYWJvdmUuCi0gICAg
bWVtbW92ZSgKLSAgICAgICAgcHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eUNhcGFjaXR5ICsg
bnVtYmVyT2ZTbG90cywKLSAgICAgICAgcHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eUNhcGFj
aXR5LAotICAgICAgICBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogcHJvcGVydHlDYXBhY2l0eSAr
IHNpemVvZihJbmRleGluZ0hlYWRlcikgKyBBcnJheVN0b3JhZ2U6OnNpemVGb3IoMCkpOwotICAg
IHJldHVybiBJbmRleGluZ0hlYWRlcjo6ZnJvbUVuZE9mKHByb3BlcnR5U3RvcmFnZSgpICsgbnVt
YmVyT2ZTbG90cyktPmJ1dHRlcmZseSgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2Vu
ZGlmIC8vIEJ1dHRlcmZseUlubGluZU1ldGhvZHNfaAotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lcy5oCShyZXZpc2lvbiAxMzM5NTUp
CShmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGluZU1ldGhv
ZHMuaDoxMzM5NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJ
bmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxODAgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCdXR0ZXJmbHlJbmxpbmVN
ZXRob2RzX2gKKyNkZWZpbmUgQnV0dGVyZmx5SW5saW5lTWV0aG9kc19oCisKKyNpbmNsdWRlICJB
cnJheVN0b3JhZ2UuaCIKKyNpbmNsdWRlICJCdXR0ZXJmbHkuaCIKKyNpbmNsdWRlICJDb3BpZWRT
cGFjZUlubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJDb3B5VmlzaXRvci5oIgorI2luY2x1ZGUg
IkpTR2xvYmFsRGF0YS5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgorCituYW1lc3BhY2UgSlND
IHsKKworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxpemVkKEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVy
dHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9h
ZFNpemVJbkJ5dGVzKQoreworICAgIHZvaWQqIHRlbXA7CisgICAgc2l6ZV90IHNpemUgPSB0b3Rh
bFNpemUocHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHksIGhhc0luZGV4aW5nSGVhZGVyLCBp
bmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5
QWxsb2NhdGVTdG9yYWdlKHNpemUsICZ0ZW1wKSkKKyAgICAgICAgQ1JBU0goKTsKKyAgICBCdXR0
ZXJmbHkqIHJlc3VsdCA9IGZyb21CYXNlKHRlbXAsIHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFj
aXR5KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJm
bHk6OmNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNpemVfdCBwcmVDYXBhY2l0eSwg
c2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIsIGNvbnN0IElu
ZGV4aW5nSGVhZGVyJiBpbmRleGluZ0hlYWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJ
bkJ5dGVzKQoreworICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gY3JlYXRlVW5pbml0aWFsaXplZCgK
KyAgICAgICAgZ2xvYmFsRGF0YSwgcHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHksIGhhc0lu
ZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgaWYgKGhhc0lu
ZGV4aW5nSGVhZGVyKQorICAgICAgICAqcmVzdWx0LT5pbmRleGluZ0hlYWRlcigpID0gaW5kZXhp
bmdIZWFkZXI7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5lIEJ1dHRlcmZseSogQnV0
dGVyZmx5OjpjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkKK3sKKyAgICByZXR1cm4gY3JlYXRlKGdsb2JhbERhdGEsIDAsIHN0cnVjdHVyZS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKSwgaGFzSW5kZXhpbmdIZWFkZXIoc3RydWN0dXJlLT5pbmRleGluZ1R5
cGUoKSksIEluZGV4aW5nSGVhZGVyKCksIDApOworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0
ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWREdXJpbmdDb2xsZWN0aW9uKENvcHlWaXNpdG9yJiB2
aXNpdG9yLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29s
IGhhc0luZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCit7
CisgICAgc2l6ZV90IHNpemUgPSB0b3RhbFNpemUocHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNp
dHksIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAg
QnV0dGVyZmx5KiByZXN1bHQgPSBmcm9tQmFzZSgKKyAgICAgICAgdmlzaXRvci5hbGxvY2F0ZU5l
d1NwYWNlKHNpemUpLAorICAgICAgICBwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5lIHZvaWQqIEJ1dHRlcmZseTo6YmFzZShTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICByZXR1cm4gYmFzZShpbmRleGluZ0hlYWRlcigpLT5w
cmVDYXBhY2l0eShzdHJ1Y3R1cmUpLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOwor
fQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6Omdyb3dQcm9wZXJ0eVN0b3JhZ2UoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBvbGRQcm9w
ZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5kZXhpbmdQYXls
b2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdQcm9wZXJ0eUNhcGFjaXR5KQoreworICAgIEFTU0VS
VChuZXdQcm9wZXJ0eUNhcGFjaXR5ID4gb2xkUHJvcGVydHlDYXBhY2l0eSk7CisgICAgQnV0dGVy
Zmx5KiByZXN1bHQgPSBjcmVhdGVVbmluaXRpYWxpemVkKAorICAgICAgICBnbG9iYWxEYXRhLCBw
cmVDYXBhY2l0eSwgbmV3UHJvcGVydHlDYXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4
aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBtZW1jcHkoCisgICAgICAgIHJlc3VsdC0+cHJv
cGVydHlTdG9yYWdlKCkgLSBvbGRQcm9wZXJ0eUNhcGFjaXR5LAorICAgICAgICBwcm9wZXJ0eVN0
b3JhZ2UoKSAtIG9sZFByb3BlcnR5Q2FwYWNpdHksCisgICAgICAgIHRvdGFsU2l6ZSgwLCBvbGRQ
cm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hlYWRlciwgaW5kZXhpbmdQYXlsb2FkU2l6ZUlu
Qnl0ZXMpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0
ZXJmbHk6Omdyb3dQcm9wZXJ0eVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IG9sZFByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBuZXdQ
cm9wZXJ0eUNhcGFjaXR5KQoreworICAgIHJldHVybiBncm93UHJvcGVydHlTdG9yYWdlKAorICAg
ICAgICBnbG9iYWxEYXRhLCBpbmRleGluZ0hlYWRlcigpLT5wcmVDYXBhY2l0eShzdHJ1Y3R1cmUp
LCBvbGRQcm9wZXJ0eUNhcGFjaXR5LAorICAgICAgICBoYXNJbmRleGluZ0hlYWRlcihzdHJ1Y3R1
cmUtPmluZGV4aW5nVHlwZSgpKSwKKyAgICAgICAgaW5kZXhpbmdIZWFkZXIoKS0+aW5kZXhpbmdQ
YXlsb2FkU2l6ZUluQnl0ZXMoc3RydWN0dXJlKSwgbmV3UHJvcGVydHlDYXBhY2l0eSk7Cit9CisK
K2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Z3Jvd1Byb3BlcnR5U3RvcmFnZShKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBzaXplX3QgbmV3UHJv
cGVydHlDYXBhY2l0eSkKK3sKKyAgICByZXR1cm4gZ3Jvd1Byb3BlcnR5U3RvcmFnZSgKKyAgICAg
ICAgZ2xvYmFsRGF0YSwgb2xkU3RydWN0dXJlLCBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFj
aXR5KCksIG5ld1Byb3BlcnR5Q2FwYWNpdHkpOworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0
ZXJmbHk6Omdyb3dBcnJheVJpZ2h0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJl
KiBvbGRTdHJ1Y3R1cmUsIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhZEluZGV4aW5n
SGVhZGVyLCBzaXplX3Qgb2xkSW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdJ
bmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKK3sKKyAgICBBU1NFUlRfVU5VU0VEKG9sZFN0cnVj
dHVyZSwgIWluZGV4aW5nSGVhZGVyKCktPnByZUNhcGFjaXR5KG9sZFN0cnVjdHVyZSkpOworICAg
IEFTU0VSVF9VTlVTRUQob2xkU3RydWN0dXJlLCBoYWRJbmRleGluZ0hlYWRlciA9PSBoYXNJbmRl
eGluZ0hlYWRlcihvbGRTdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSk7CisgICAgdm9pZCogdGhl
QmFzZSA9IGJhc2UoMCwgcHJvcGVydHlDYXBhY2l0eSk7CisgICAgc2l6ZV90IG9sZFNpemUgPSB0
b3RhbFNpemUoMCwgcHJvcGVydHlDYXBhY2l0eSwgaGFkSW5kZXhpbmdIZWFkZXIsIG9sZEluZGV4
aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBzaXplX3QgbmV3U2l6ZSA9IHRvdGFsU2l6ZSgw
LCBwcm9wZXJ0eUNhcGFjaXR5LCB0cnVlLCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7
CisgICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5UmVhbGxvY2F0ZVN0b3JhZ2UoJnRoZUJhc2Us
IG9sZFNpemUsIG5ld1NpemUpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gZnJvbUJh
c2UodGhlQmFzZSwgMCwgcHJvcGVydHlDYXBhY2l0eSk7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkq
IEJ1dHRlcmZseTo6Z3Jvd0FycmF5UmlnaHQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1
Y3R1cmUqIG9sZFN0cnVjdHVyZSwgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVz
KQoreworICAgIHJldHVybiBncm93QXJyYXlSaWdodCgKKyAgICAgICAgZ2xvYmFsRGF0YSwgb2xk
U3RydWN0dXJlLCBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCksCisgICAgICAgIGhh
c0luZGV4aW5nSGVhZGVyKG9sZFN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpLAorICAgICAgICBp
bmRleGluZ0hlYWRlcigpLT5pbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyhvbGRTdHJ1Y3R1cmUp
LCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkq
IEJ1dHRlcmZseTo6cmVzaXplQXJyYXkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3Qg
cHJvcGVydHlDYXBhY2l0eSwgYm9vbCBvbGRIYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IG9sZElu
ZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzLCBzaXplX3QgbmV3UHJlQ2FwYWNpdHksIGJvb2wgbmV3
SGFzSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykK
K3sKKyAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQoCisgICAgICAg
IGdsb2JhbERhdGEsIG5ld1ByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBuZXdIYXNJbmRl
eGluZ0hlYWRlciwgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIC8vIEZJWE1F
OiBUaGlzIGNvdWxkIGJlIG1hZGUgbXVjaCBtb3JlIGVmZmljaWVudCBpZiB3ZSB1c2VkIHRoZSBw
cm9wZXJ0eSBzaXplLAorICAgIC8vIG5vdCB0aGUgY2FwYWNpdHkuCisgICAgdm9pZCogdG8gPSBy
ZXN1bHQtPnByb3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVydHlDYXBhY2l0eTsKKyAgICB2b2lkKiBm
cm9tID0gcHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eUNhcGFjaXR5OworICAgIHNpemVfdCBz
aXplID0gc3RkOjptaW4oCisgICAgICAgIHRvdGFsU2l6ZSgwLCBwcm9wZXJ0eUNhcGFjaXR5LCBv
bGRIYXNJbmRleGluZ0hlYWRlciwgb2xkSW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpLAorICAg
ICAgICB0b3RhbFNpemUoMCwgcHJvcGVydHlDYXBhY2l0eSwgbmV3SGFzSW5kZXhpbmdIZWFkZXIs
IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKSk7CisgICAgbWVtY3B5KHRvLCBmcm9tLCBz
aXplKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJm
bHk6OnJlc2l6ZUFycmF5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIHNpemVfdCBuZXdQcmVDYXBhY2l0eSwgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNp
emVJbkJ5dGVzKQoreworICAgIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIgPSBKU0M6Omhhc0luZGV4
aW5nSGVhZGVyKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpOworICAgIHJldHVybiByZXNpemVB
cnJheSgKKyAgICAgICAgZ2xvYmFsRGF0YSwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgp
LCBoYXNJbmRleGluZ0hlYWRlciwKKyAgICAgICAgaW5kZXhpbmdIZWFkZXIoKS0+aW5kZXhpbmdQ
YXlsb2FkU2l6ZUluQnl0ZXMoc3RydWN0dXJlKSwgbmV3UHJlQ2FwYWNpdHksCisgICAgICAgIGhh
c0luZGV4aW5nSGVhZGVyLCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Cit9CisKK2lu
bGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6dW5zaGlmdChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
c2l6ZV90IG51bWJlck9mU2xvdHMpCit7CisgICAgQVNTRVJUKGhhc0FycmF5U3RvcmFnZShzdHJ1
Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSk7CisgICAgQVNTRVJUKG51bWJlck9mU2xvdHMgPD0gaW5k
ZXhpbmdIZWFkZXIoKS0+cHJlQ2FwYWNpdHkoc3RydWN0dXJlKSk7CisgICAgdW5zaWduZWQgcHJv
cGVydHlDYXBhY2l0eSA9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKKyAgICAvLyBG
SVhNRTogSXQgd291bGQgcHJvYmFibHkgYmUgd2lzZSB0byByZXdyaXRlIHRoaXMgYXMgYSBsb29w
IHNpbmNlICgxKSB3ZSBrbm93IGluIHdoaWNoCisgICAgLy8gZGlyZWN0aW9uIHdlJ3JlIG1vdmlu
ZyBtZW1vcnkgc28gd2UgZG9uJ3QgbmVlZCB0aGUgZXh0cmEgY2hlY2sgb2YgbWVtbW92ZSBhbmQg
KDIpIHdlJ3JlCisgICAgLy8gbW92aW5nIGEgc21hbGwgYW1vdW50IG9mIG1lbW9yeSBpbiB0aGUg
Y29tbW9uIGNhc2Ugc28gdGhlIHRocm91Z2hwdXQgb2YgbWVtbW92ZSB3b24ndAorICAgIC8vIGFt
b3J0aXplIHRoZSBvdmVyaGVhZCBvZiBjYWxsaW5nIGl0LiBBbmQgbm8sIHdlIGNhbm5vdCByZWx5
IG9uIHRoZSBDKysgY29tcGlsZXIgdG8KKyAgICAvLyBpbmxpbmUgbWVtbW92ZSAocGFydGljdWxh
cmx5IHNpbmNlIHRoZSBzaXplIGFyZ3VtZW50IGlzIGxpa2VseSB0byBiZSB2YXJpYWJsZSksIG5v
ciBjYW4KKyAgICAvLyB3ZSByZWx5IG9uIHRoZSBjb21waWxlciB0byByZWNvZ25pemUgdGhlIG9y
ZGVyaW5nIG9mIHRoZSBwb2ludGVyIGFyZ3VtZW50cyAoc2luY2UKKyAgICAvLyBwcm9wZXJ0eUNh
cGFjaXR5IGlzIHZhcmlhYmxlIGFuZCBjb3VsZCBjYXVzZSB3cmFwLWFyb3VuZCBhcyBmYXIgYXMg
dGhlIGNvbXBpbGVyIGtub3dzKS4KKyAgICBtZW1tb3ZlKAorICAgICAgICBwcm9wZXJ0eVN0b3Jh
Z2UoKSAtIG51bWJlck9mU2xvdHMgLSBwcm9wZXJ0eUNhcGFjaXR5LAorICAgICAgICBwcm9wZXJ0
eVN0b3JhZ2UoKSAtIHByb3BlcnR5Q2FwYWNpdHksCisgICAgICAgIHNpemVvZihFbmNvZGVkSlNW
YWx1ZSkgKiBwcm9wZXJ0eUNhcGFjaXR5ICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSArIEFycmF5
U3RvcmFnZTo6c2l6ZUZvcigwKSk7CisgICAgcmV0dXJuIEluZGV4aW5nSGVhZGVyOjpmcm9tRW5k
T2YocHJvcGVydHlTdG9yYWdlKCkgLSBudW1iZXJPZlNsb3RzKS0+YnV0dGVyZmx5KCk7Cit9CisK
K2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6c2hpZnQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IHNpemVfdCBudW1iZXJPZlNsb3RzKQoreworICAgIEFTU0VSVChoYXNBcnJheVN0b3JhZ2Uoc3Ry
dWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpOworICAgIHVuc2lnbmVkIHByb3BlcnR5Q2FwYWNpdHkg
PSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCk7CisgICAgLy8gRklYTUU6IFNlZSBjb21t
ZW50IGluIHVuc2hpZnQoKSwgYWJvdmUuCisgICAgbWVtbW92ZSgKKyAgICAgICAgcHJvcGVydHlT
dG9yYWdlKCkgLSBwcm9wZXJ0eUNhcGFjaXR5ICsgbnVtYmVyT2ZTbG90cywKKyAgICAgICAgcHJv
cGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eUNhcGFjaXR5LAorICAgICAgICBzaXplb2YoRW5jb2Rl
ZEpTVmFsdWUpICogcHJvcGVydHlDYXBhY2l0eSArIHNpemVvZihJbmRleGluZ0hlYWRlcikgKyBB
cnJheVN0b3JhZ2U6OnNpemVGb3IoMCkpOworICAgIHJldHVybiBJbmRleGluZ0hlYWRlcjo6ZnJv
bUVuZE9mKHByb3BlcnR5U3RvcmFnZSgpICsgbnVtYmVyT2ZTbG90cyktPmJ1dHRlcmZseSgpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEJ1dHRlcmZseUlubGluZU1ldGhv
ZHNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxp
bmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVy
Zmx5SW5saW5lcy5oCShyZXZpc2lvbiAxMzM5NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9CdXR0ZXJmbHlJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDEyICsyMywx
MiBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBCdXR0ZXJmbHlJbmxpbmVNZXRo
b2RzX2gKLSNkZWZpbmUgQnV0dGVyZmx5SW5saW5lTWV0aG9kc19oCisjaWZuZGVmIEJ1dHRlcmZs
eUlubGluZXNfaAorI2RlZmluZSBCdXR0ZXJmbHlJbmxpbmVzX2gKIAogI2luY2x1ZGUgIkFycmF5
U3RvcmFnZS5oIgogI2luY2x1ZGUgIkJ1dHRlcmZseS5oIgotI2luY2x1ZGUgIkNvcGllZFNwYWNl
SW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lcy5oIgogI2luY2x1
ZGUgIkNvcHlWaXNpdG9yLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgiCiAjaW5jbHVkZSAi
U3RydWN0dXJlLmgiCkBAIC0xNzYsNSArMTc2LDUgQEAgaW5saW5lIEJ1dHRlcmZseSogQnV0dGVy
Zmx5OjpzaGlmdChTdHJ1YwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAotI2VuZGlmIC8vIEJ1dHRl
cmZseUlubGluZU1ldGhvZHNfaAorI2VuZGlmIC8vIEJ1dHRlcmZseUlubGluZXNfaAogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlcklubGluZU1ldGhv
ZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGlu
Z0hlYWRlcklubGluZU1ldGhvZHMuaAkocmV2aXNpb24gMTMzOTczKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNjQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKLSAqLwotCi0jaWZuZGVmIEluZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kc19oCi0jZGVm
aW5lIEluZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kc19oCi0KLSNpbmNsdWRlICJBcnJheVN0b3Jh
Z2UuaCIKLSNpbmNsdWRlICJJbmRleGluZ0hlYWRlci5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZS5o
IgotCi1uYW1lc3BhY2UgSlNDIHsKLQotaW5saW5lIHNpemVfdCBJbmRleGluZ0hlYWRlcjo6cHJl
Q2FwYWNpdHkoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi17Ci0gICAgaWYgKExJS0VMWSghaGFzQXJy
YXlTdG9yYWdlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKSkKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgCi0gICAgcmV0dXJuIGFycmF5U3RvcmFnZSgpLT5tX2luZGV4QmlhczsKLX0KLQotaW5s
aW5lIHNpemVfdCBJbmRleGluZ0hlYWRlcjo6aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMoU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCi17Ci0gICAgc3dpdGNoIChzdHJ1Y3R1cmUtPmluZGV4aW5nVHlw
ZSgpKSB7Ci0gICAgY2FzZSBBTExfVU5ERUNJREVEX0lOREVYSU5HX1RZUEVTOgotICAgIGNhc2Ug
QUxMX0lOVDMyX0lOREVYSU5HX1RZUEVTOgotICAgIGNhc2UgQUxMX0RPVUJMRV9JTkRFWElOR19U
WVBFUzoKLSAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgotICAgICAgICBy
ZXR1cm4gdmVjdG9yTGVuZ3RoKCkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOwotICAgICAgICAK
LSAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgotICAgICAgICByZXR1
cm4gQXJyYXlTdG9yYWdlOjpzaXplRm9yKGFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKSk7
Ci0gICAgICAgIAotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVCghaGFzSW5kZXhlZFByb3Bl
cnRpZXMoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpOwotICAgICAgICByZXR1cm4gMDsKLSAg
ICB9Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gSW5kZXhpbmdIZWFkZXJJ
bmxpbmVNZXRob2RzX2gKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5k
ZXhpbmdIZWFkZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW5kZXhpbmdIZWFkZXJJbmxpbmVzLmgJKHJldmlzaW9uIDEzMzk1NSkJKGZyb20g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2Rz
Lmg6MTMzOTU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFk
ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEluZGV4aW5nSGVhZGVy
SW5saW5lTWV0aG9kc19oCisjZGVmaW5lIEluZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kc19oCisK
KyNpbmNsdWRlICJBcnJheVN0b3JhZ2UuaCIKKyNpbmNsdWRlICJJbmRleGluZ0hlYWRlci5oIgor
I2luY2x1ZGUgIlN0cnVjdHVyZS5oIgorCituYW1lc3BhY2UgSlNDIHsKKworaW5saW5lIHNpemVf
dCBJbmRleGluZ0hlYWRlcjo6cHJlQ2FwYWNpdHkoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7Cisg
ICAgaWYgKExJS0VMWSghaGFzQXJyYXlTdG9yYWdlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkp
KSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgcmV0dXJuIGFycmF5U3RvcmFnZSgpLT5t
X2luZGV4QmlhczsKK30KKworaW5saW5lIHNpemVfdCBJbmRleGluZ0hlYWRlcjo6aW5kZXhpbmdQ
YXlsb2FkU2l6ZUluQnl0ZXMoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAgc3dpdGNoIChz
dHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBTExfVU5ERUNJREVEX0lOREVY
SU5HX1RZUEVTOgorICAgIGNhc2UgQUxMX0lOVDMyX0lOREVYSU5HX1RZUEVTOgorICAgIGNhc2Ug
QUxMX0RPVUJMRV9JTkRFWElOR19UWVBFUzoKKyAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVY
SU5HX1RZUEVTOgorICAgICAgICByZXR1cm4gdmVjdG9yTGVuZ3RoKCkgKiBzaXplb2YoRW5jb2Rl
ZEpTVmFsdWUpOworICAgICAgICAKKyAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5H
X1RZUEVTOgorICAgICAgICByZXR1cm4gQXJyYXlTdG9yYWdlOjpzaXplRm9yKGFycmF5U3RvcmFn
ZSgpLT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFT
U0VSVCghaGFzSW5kZXhlZFByb3BlcnRpZXMoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpOwor
ICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5k
aWYgLy8gSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXJJbmxpbmVzLmgJKHJl
dmlzaW9uIDEzMzk1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5n
SGVhZGVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw4ICsyMyw4IEBACiAgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKICAqLwogCi0jaWZuZGVmIEluZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kc19oCi0j
ZGVmaW5lIEluZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kc19oCisjaWZuZGVmIEluZGV4aW5nSGVh
ZGVySW5saW5lc19oCisjZGVmaW5lIEluZGV4aW5nSGVhZGVySW5saW5lc19oCiAKICNpbmNsdWRl
ICJBcnJheVN0b3JhZ2UuaCIKICNpbmNsdWRlICJJbmRleGluZ0hlYWRlci5oIgpAQCAtNjAsNSAr
NjAsNSBAQCBpbmxpbmUgc2l6ZV90IEluZGV4aW5nSGVhZGVyOjppbmRleGluZ1BhCiAKIH0gLy8g
bmFtZXNwYWNlIEpTQwogCi0jZW5kaWYgLy8gSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzX2gK
KyNlbmRpZiAvLyBJbmRleGluZ0hlYWRlcklubGluZXNfaAogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uaAkocmV2aXNpb24gMTMzOTczKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMwLDcgKzMwLDcgQEAKICNkZWZpbmUgSlNBY3RpdmF0aW9uX2gKIAogI2luY2x1ZGUg
IkNvZGVCbG9jay5oIgotI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oIgorI2lu
Y2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTVmFyaWFibGVPYmplY3Qu
aCIKICNpbmNsdWRlICJOb2Rlcy5oIgogI2luY2x1ZGUgIlN5bWJvbFRhYmxlLmgiCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAkocmV2aXNpb24gMTMzOTcz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI0LDE0ICsyNCwxNCBAQAogI2luY2x1ZGUgIkpTQXJyYXkuaCIKIAogI2luY2x1
ZGUgIkFycmF5UHJvdG90eXBlLmgiCi0jaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5o
IgotI2luY2x1ZGUgIkNvcGllZFNwYWNlLmgiCi0jaW5jbHVkZSAiQ29waWVkU3BhY2VJbmxpbmVN
ZXRob2RzLmgiCisjaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lcy5oIgogI2luY2x1ZGUgIkNhY2hl
ZENhbGwuaCIKKyNpbmNsdWRlICJDb3BpZWRTcGFjZS5oIgorI2luY2x1ZGUgIkNvcGllZFNwYWNl
SW5saW5lcy5oIgogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiRXhlY3V0YWJsZS5oIgog
I2luY2x1ZGUgIkdldHRlclNldHRlci5oIgotI2luY2x1ZGUgIkluZGV4aW5nSGVhZGVySW5saW5l
TWV0aG9kcy5oIgorI2luY2x1ZGUgIkluZGV4aW5nSGVhZGVySW5saW5lcy5oIgogI2luY2x1ZGUg
IlByb3BlcnR5TmFtZUFycmF5LmgiCiAjaW5jbHVkZSAiUmVqZWN0LmgiCiAjaW5jbHVkZSA8d3Rm
L0FWTFRyZWUuaD4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXku
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJ
KHJldmlzaW9uIDEzMzk3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJy
YXkuaAkod29ya2luZyBjb3B5KQpAQCAtMjIsNyArMjIsNyBAQAogI2RlZmluZSBKU0FycmF5X2gK
IAogI2luY2x1ZGUgIkFycmF5Q29udmVudGlvbnMuaCIKLSNpbmNsdWRlICJCdXR0ZXJmbHlJbmxp
bmVNZXRob2RzLmgiCisjaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lcy5oIgogI2luY2x1ZGUgIkpT
T2JqZWN0LmgiCiAKIG5hbWVzcGFjZSBKU0MgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNDZWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNDZWxsLmgJKHJldmlzaW9uIDEzMzk3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQ2VsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw5ICsyOCw5IEBACiAjaW5j
bHVkZSAiQ29uc3RydWN0RGF0YS5oIgogI2luY2x1ZGUgIkhlYXAuaCIKICNpbmNsdWRlICJKU0xv
Y2suaCIKLSNpbmNsdWRlICJKU1ZhbHVlSW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkpTVmFs
dWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKLSNpbmNsdWRlICJTbG90Vmlz
aXRvcklubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKICNp
bmNsdWRlICJUeXBlZEFycmF5RGVzY3JpcHRvci5oIgogI2luY2x1ZGUgIldyaXRlQmFycmllci5o
IgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMTMzOTczKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwx
NCArMjQsMTQgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgog
Ci0jaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oIgotI2luY2x1ZGUgIkNvcGllZFNw
YWNlSW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkJ1dHRlcmZseUlubGluZXMuaCIKKyNpbmNs
dWRlICJDb3BpZWRTcGFjZUlubGluZXMuaCIKICNpbmNsdWRlICJDb3B5VmlzaXRvci5oIgotI2lu
Y2x1ZGUgIkNvcHlWaXNpdG9ySW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkNvcHlWaXNpdG9y
SW5saW5lcy5oIgogI2luY2x1ZGUgIkRhdGVQcm90b3R5cGUuaCIKICNpbmNsdWRlICJFcnJvckNv
bnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCi0jaW5jbHVkZSAiSW5kZXhp
bmdIZWFkZXJJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiSW5kZXhpbmdIZWFkZXJJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0Lmgi
CiAjaW5jbHVkZSAiTG9va3VwLmgiCkBAIC00Miw3ICs0Miw3IEBACiAjaW5jbHVkZSAiUHJvcGVy
dHlEZXNjcmlwdG9yLmgiCiAjaW5jbHVkZSAiUHJvcGVydHlOYW1lQXJyYXkuaCIKICNpbmNsdWRl
ICJSZWplY3QuaCIKLSNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZU1ldGhvZHMuaCIKKyNpbmNs
dWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKICNpbmNsdWRlIDxtYXRoLmg+CiAjaW5jbHVkZSA8
d3RmL0Fzc2VydGlvbnMuaD4KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNWYWx1ZUlubGluZU1ldGhvZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1ZhbHVlSW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAxMzM5NzMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlSW5saW5lTWV0aG9kcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDQ5NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgSlNWYWx1ZUlubGluZU1ldGhvZHNfaAotI2RlZmlu
ZSBKU1ZhbHVlSW5saW5lTWV0aG9kc19oCi0KLSNpbmNsdWRlICJKU1ZhbHVlLmgiCi0KLW5hbWVz
cGFjZSBKU0MgewotCi0gICAgQUxXQVlTX0lOTElORSBpbnQzMl90IEpTVmFsdWU6OnRvSW50MzIo
RXhlY1N0YXRlKiBleGVjKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKGlzSW50MzIoKSkKLSAg
ICAgICAgICAgIHJldHVybiBhc0ludDMyKCk7Ci0gICAgICAgIHJldHVybiBKU0M6OnRvSW50MzIo
dG9OdW1iZXIoZXhlYykpOwotICAgIH0KLQotICAgIGlubGluZSB1aW50MzJfdCBKU1ZhbHVlOjp0
b1VJbnQzMihFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0Ci0gICAgewotICAgICAgICAvLyBTZWUgY29t
bWVudCBvbiBKU0M6OnRvVUludDMyLCBhYm92ZS4KLSAgICAgICAgcmV0dXJuIHRvSW50MzIoZXhl
Yyk7Ci0gICAgfQotCi0gICAgaW5saW5lIGJvb2wgSlNWYWx1ZTo6aXNVSW50MzIoKSBjb25zdAot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGlzSW50MzIoKSAmJiBhc0ludDMyKCkgPj0gMDsKLSAgICB9
Ci0KLSAgICBpbmxpbmUgdWludDMyX3QgSlNWYWx1ZTo6YXNVSW50MzIoKSBjb25zdAotICAgIHsK
LSAgICAgICAgQVNTRVJUKGlzVUludDMyKCkpOwotICAgICAgICByZXR1cm4gYXNJbnQzMigpOwot
ICAgIH0KLQotICAgIGlubGluZSBkb3VibGUgSlNWYWx1ZTo6YXNOdW1iZXIoKSBjb25zdAotICAg
IHsKLSAgICAgICAgQVNTRVJUKGlzTnVtYmVyKCkpOwotICAgICAgICByZXR1cm4gaXNJbnQzMigp
ID8gYXNJbnQzMigpIDogYXNEb3VibGUoKTsKLSAgICB9Ci0KLSAgICBpbmxpbmUgSlNWYWx1ZSBq
c05hTigpCi0gICAgewotICAgICAgICByZXR1cm4gSlNWYWx1ZShRTmFOKTsKLSAgICB9Ci0KLSAg
ICBpbmxpbmUgSlNWYWx1ZTo6SlNWYWx1ZShjaGFyIGkpCi0gICAgewotICAgICAgICAqdGhpcyA9
IEpTVmFsdWUoc3RhdGljX2Nhc3Q8aW50MzJfdD4oaSkpOwotICAgIH0KLQotICAgIGlubGluZSBK
U1ZhbHVlOjpKU1ZhbHVlKHVuc2lnbmVkIGNoYXIgaSkKLSAgICB7Ci0gICAgICAgICp0aGlzID0g
SlNWYWx1ZShzdGF0aWNfY2FzdDxpbnQzMl90PihpKSk7Ci0gICAgfQotCi0gICAgaW5saW5lIEpT
VmFsdWU6OkpTVmFsdWUoc2hvcnQgaSkKLSAgICB7Ci0gICAgICAgICp0aGlzID0gSlNWYWx1ZShz
dGF0aWNfY2FzdDxpbnQzMl90PihpKSk7Ci0gICAgfQotCi0gICAgaW5saW5lIEpTVmFsdWU6OkpT
VmFsdWUodW5zaWduZWQgc2hvcnQgaSkKLSAgICB7Ci0gICAgICAgICp0aGlzID0gSlNWYWx1ZShz
dGF0aWNfY2FzdDxpbnQzMl90PihpKSk7Ci0gICAgfQotCi0gICAgaW5saW5lIEpTVmFsdWU6OkpT
VmFsdWUodW5zaWduZWQgaSkKLSAgICB7Ci0gICAgICAgIGlmIChzdGF0aWNfY2FzdDxpbnQzMl90
PihpKSA8IDApIHsKLSAgICAgICAgICAgICp0aGlzID0gSlNWYWx1ZShFbmNvZGVBc0RvdWJsZSwg
c3RhdGljX2Nhc3Q8ZG91YmxlPihpKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LSAgICAgICAgKnRoaXMgPSBKU1ZhbHVlKHN0YXRpY19jYXN0PGludDMyX3Q+KGkpKTsKLSAgICB9
Ci0KLSAgICBpbmxpbmUgSlNWYWx1ZTo6SlNWYWx1ZShsb25nIGkpCi0gICAgewotICAgICAgICBp
ZiAoc3RhdGljX2Nhc3Q8aW50MzJfdD4oaSkgIT0gaSkgewotICAgICAgICAgICAgKnRoaXMgPSBK
U1ZhbHVlKEVuY29kZUFzRG91YmxlLCBzdGF0aWNfY2FzdDxkb3VibGU+KGkpKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAqdGhpcyA9IEpTVmFsdWUoc3RhdGljX2Nh
c3Q8aW50MzJfdD4oaSkpOwotICAgIH0KLQotICAgIGlubGluZSBKU1ZhbHVlOjpKU1ZhbHVlKHVu
c2lnbmVkIGxvbmcgaSkKLSAgICB7Ci0gICAgICAgIGlmIChzdGF0aWNfY2FzdDx1aW50MzJfdD4o
aSkgIT0gaSkgewotICAgICAgICAgICAgKnRoaXMgPSBKU1ZhbHVlKEVuY29kZUFzRG91YmxlLCBz
dGF0aWNfY2FzdDxkb3VibGU+KGkpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgICAgICAqdGhpcyA9IEpTVmFsdWUoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGkpKTsKLSAgICB9
Ci0KLSAgICBpbmxpbmUgSlNWYWx1ZTo6SlNWYWx1ZShsb25nIGxvbmcgaSkKLSAgICB7Ci0gICAg
ICAgIGlmIChzdGF0aWNfY2FzdDxpbnQzMl90PihpKSAhPSBpKSB7Ci0gICAgICAgICAgICAqdGhp
cyA9IEpTVmFsdWUoRW5jb2RlQXNEb3VibGUsIHN0YXRpY19jYXN0PGRvdWJsZT4oaSkpOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgICp0aGlzID0gSlNWYWx1ZShzdGF0
aWNfY2FzdDxpbnQzMl90PihpKSk7Ci0gICAgfQotCi0gICAgaW5saW5lIEpTVmFsdWU6OkpTVmFs
dWUodW5zaWduZWQgbG9uZyBsb25nIGkpCi0gICAgewotICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8
dWludDMyX3Q+KGkpICE9IGkpIHsKLSAgICAgICAgICAgICp0aGlzID0gSlNWYWx1ZShFbmNvZGVB
c0RvdWJsZSwgc3RhdGljX2Nhc3Q8ZG91YmxlPihpKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICAgICAgKnRoaXMgPSBKU1ZhbHVlKHN0YXRpY19jYXN0PHVpbnQzMl90Pihp
KSk7Ci0gICAgfQotCi0gICAgaW5saW5lIEpTVmFsdWU6OkpTVmFsdWUoZG91YmxlIGQpCi0gICAg
ewotICAgICAgICBjb25zdCBpbnQzMl90IGFzSW50MzIgPSBzdGF0aWNfY2FzdDxpbnQzMl90Pihk
KTsKLSAgICAgICAgaWYgKGFzSW50MzIgIT0gZCB8fCAoIWFzSW50MzIgJiYgc2lnbmJpdChkKSkp
IHsgLy8gdHJ1ZSBmb3IgLTAuMAotICAgICAgICAgICAgKnRoaXMgPSBKU1ZhbHVlKEVuY29kZUFz
RG91YmxlLCBkKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAqdGhp
cyA9IEpTVmFsdWUoc3RhdGljX2Nhc3Q8aW50MzJfdD4oZCkpOwotICAgIH0KLQotICAgIGlubGlu
ZSBFbmNvZGVkSlNWYWx1ZSBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiB2YWx1ZS51LmFzSW50NjQ7Ci0gICAgfQotCi0gICAgaW5saW5lIEpTVmFs
dWUgSlNWYWx1ZTo6ZGVjb2RlKEVuY29kZWRKU1ZhbHVlIGVuY29kZWRKU1ZhbHVlKQotICAgIHsK
LSAgICAgICAgSlNWYWx1ZSB2OwotICAgICAgICB2LnUuYXNJbnQ2NCA9IGVuY29kZWRKU1ZhbHVl
OwotICAgICAgICByZXR1cm4gdjsKLSAgICB9Ci0KLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAg
IGlubGluZSBKU1ZhbHVlOjpKU1ZhbHVlKCkKLSAgICB7Ci0gICAgICAgIHUuYXNCaXRzLnRhZyA9
IEVtcHR5VmFsdWVUYWc7Ci0gICAgICAgIHUuYXNCaXRzLnBheWxvYWQgPSAwOwotICAgIH0KLQot
ICAgIGlubGluZSBKU1ZhbHVlOjpKU1ZhbHVlKEpTTnVsbFRhZykKLSAgICB7Ci0gICAgICAgIHUu
YXNCaXRzLnRhZyA9IE51bGxUYWc7Ci0gICAgICAgIHUuYXNCaXRzLnBheWxvYWQgPSAwOwotICAg
IH0KLSAgICAKLSAgICBpbmxpbmUgSlNWYWx1ZTo6SlNWYWx1ZShKU1VuZGVmaW5lZFRhZykKLSAg
ICB7Ci0gICAgICAgIHUuYXNCaXRzLnRhZyA9IFVuZGVmaW5lZFRhZzsKLSAgICAgICAgdS5hc0Jp
dHMucGF5bG9hZCA9IDA7Ci0gICAgfQotICAgIAotICAgIGlubGluZSBKU1ZhbHVlOjpKU1ZhbHVl
KEpTVHJ1ZVRhZykKLSAgICB7Ci0gICAgICAgIHUuYXNCaXRzLnRhZyA9IEJvb2xlYW5UYWc7Ci0g
ICAgICAgIHUuYXNCaXRzLnBheWxvYWQgPSAxOwotICAgIH0KLSAgICAKLSAgICBpbmxpbmUgSlNW
YWx1ZTo6SlNWYWx1ZShKU0ZhbHNlVGFnKQotICAgIHsKLSAgICAgICAgdS5hc0JpdHMudGFnID0g
Qm9vbGVhblRhZzsKLSAgICAgICAgdS5hc0JpdHMucGF5bG9hZCA9IDA7Ci0gICAgfQotCi0gICAg
aW5saW5lIEpTVmFsdWU6OkpTVmFsdWUoSGFzaFRhYmxlRGVsZXRlZFZhbHVlVGFnKQotICAgIHsK
LSAgICAgICAgdS5hc0JpdHMudGFnID0gRGVsZXRlZFZhbHVlVGFnOwotICAgICAgICB1LmFzQml0
cy5wYXlsb2FkID0gMDsKLSAgICB9Ci0KLSAgICBpbmxpbmUgSlNWYWx1ZTo6SlNWYWx1ZShKU0Nl
bGwqIHB0cikKLSAgICB7Ci0gICAgICAgIGlmIChwdHIpCi0gICAgICAgICAgICB1LmFzQml0cy50
YWcgPSBDZWxsVGFnOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB1LmFzQml0cy50YWcgPSBF
bXB0eVZhbHVlVGFnOwotICAgICAgICB1LmFzQml0cy5wYXlsb2FkID0gcmVpbnRlcnByZXRfY2Fz
dDxpbnQzMl90PihwdHIpOwotICAgIH0KLQotICAgIGlubGluZSBKU1ZhbHVlOjpKU1ZhbHVlKGNv
bnN0IEpTQ2VsbCogcHRyKQotICAgIHsKLSAgICAgICAgaWYgKHB0cikKLSAgICAgICAgICAgIHUu
YXNCaXRzLnRhZyA9IENlbGxUYWc7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHUuYXNCaXRz
LnRhZyA9IEVtcHR5VmFsdWVUYWc7Ci0gICAgICAgIHUuYXNCaXRzLnBheWxvYWQgPSByZWludGVy
cHJldF9jYXN0PGludDMyX3Q+KGNvbnN0X2Nhc3Q8SlNDZWxsKj4ocHRyKSk7Ci0gICAgfQotCi0g
ICAgaW5saW5lIEpTVmFsdWU6Om9wZXJhdG9yIGJvb2woKSBjb25zdAotICAgIHsKLSAgICAgICAg
QVNTRVJUKHRhZygpICE9IERlbGV0ZWRWYWx1ZVRhZyk7Ci0gICAgICAgIHJldHVybiB0YWcoKSAh
PSBFbXB0eVZhbHVlVGFnOwotICAgIH0KLQotICAgIGlubGluZSBib29sIEpTVmFsdWU6Om9wZXJh
dG9yPT0oY29uc3QgSlNWYWx1ZSYgb3RoZXIpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4g
dS5hc0ludDY0ID09IG90aGVyLnUuYXNJbnQ2NDsKLSAgICB9Ci0KLSAgICBpbmxpbmUgYm9vbCBK
U1ZhbHVlOjpvcGVyYXRvciE9KGNvbnN0IEpTVmFsdWUmIG90aGVyKSBjb25zdAotICAgIHsKLSAg
ICAgICAgcmV0dXJuIHUuYXNJbnQ2NCAhPSBvdGhlci51LmFzSW50NjQ7Ci0gICAgfQotCi0gICAg
aW5saW5lIGJvb2wgSlNWYWx1ZTo6aXNFbXB0eSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1
cm4gdGFnKCkgPT0gRW1wdHlWYWx1ZVRhZzsKLSAgICB9Ci0KLSAgICBpbmxpbmUgYm9vbCBKU1Zh
bHVlOjppc1VuZGVmaW5lZCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gdGFnKCkgPT0g
VW5kZWZpbmVkVGFnOwotICAgIH0KLQotICAgIGlubGluZSBib29sIEpTVmFsdWU6OmlzTnVsbCgp
IGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gdGFnKCkgPT0gTnVsbFRhZzsKLSAgICB9Ci0K
LSAgICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjppc1VuZGVmaW5lZE9yTnVsbCgpIGNvbnN0Ci0gICAg
ewotICAgICAgICByZXR1cm4gaXNVbmRlZmluZWQoKSB8fCBpc051bGwoKTsKLSAgICB9Ci0KLSAg
ICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjppc0NlbGwoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0
dXJuIHRhZygpID09IENlbGxUYWc7Ci0gICAgfQotCi0gICAgaW5saW5lIGJvb2wgSlNWYWx1ZTo6
aXNJbnQzMigpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gdGFnKCkgPT0gSW50MzJUYWc7
Ci0gICAgfQotCi0gICAgaW5saW5lIGJvb2wgSlNWYWx1ZTo6aXNEb3VibGUoKSBjb25zdAotICAg
IHsKLSAgICAgICAgcmV0dXJuIHRhZygpIDwgTG93ZXN0VGFnOwotICAgIH0KLQotICAgIGlubGlu
ZSBib29sIEpTVmFsdWU6OmlzVHJ1ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gdGFn
KCkgPT0gQm9vbGVhblRhZyAmJiBwYXlsb2FkKCk7Ci0gICAgfQotCi0gICAgaW5saW5lIGJvb2wg
SlNWYWx1ZTo6aXNGYWxzZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gdGFnKCkgPT0g
Qm9vbGVhblRhZyAmJiAhcGF5bG9hZCgpOwotICAgIH0KLQotICAgIGlubGluZSB1aW50MzJfdCBK
U1ZhbHVlOjp0YWcoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIHUuYXNCaXRzLnRhZzsK
LSAgICB9Ci0gICAgCi0gICAgaW5saW5lIGludDMyX3QgSlNWYWx1ZTo6cGF5bG9hZCgpIGNvbnN0
Ci0gICAgewotICAgICAgICByZXR1cm4gdS5hc0JpdHMucGF5bG9hZDsKLSAgICB9Ci0gICAgCi0g
ICAgaW5saW5lIGludDMyX3QgSlNWYWx1ZTo6YXNJbnQzMigpIGNvbnN0Ci0gICAgewotICAgICAg
ICBBU1NFUlQoaXNJbnQzMigpKTsKLSAgICAgICAgcmV0dXJuIHUuYXNCaXRzLnBheWxvYWQ7Ci0g
ICAgfQotICAgIAotICAgIGlubGluZSBkb3VibGUgSlNWYWx1ZTo6YXNEb3VibGUoKSBjb25zdAot
ICAgIHsKLSAgICAgICAgQVNTRVJUKGlzRG91YmxlKCkpOwotICAgICAgICByZXR1cm4gdS5hc0Rv
dWJsZTsKLSAgICB9Ci0gICAgCi0gICAgQUxXQVlTX0lOTElORSBKU0NlbGwqIEpTVmFsdWU6OmFz
Q2VsbCgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoaXNDZWxsKCkpOwotICAgICAgICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxKU0NlbGwqPih1LmFzQml0cy5wYXlsb2FkKTsKLSAgICB9
Ci0KLSAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWU6OkpTVmFsdWUoRW5jb2RlQXNEb3VibGVUYWcs
IGRvdWJsZSBkKQotICAgIHsKLSAgICAgICAgdS5hc0RvdWJsZSA9IGQ7Ci0gICAgfQotCi0gICAg
aW5saW5lIEpTVmFsdWU6OkpTVmFsdWUoaW50IGkpCi0gICAgewotICAgICAgICB1LmFzQml0cy50
YWcgPSBJbnQzMlRhZzsKLSAgICAgICAgdS5hc0JpdHMucGF5bG9hZCA9IGk7Ci0gICAgfQotCi0j
aWYgRU5BQkxFKExMSU5UX0NfTE9PUCkKLSAgICBpbmxpbmUgSlNWYWx1ZTo6SlNWYWx1ZShpbnQz
Ml90IHRhZywgaW50MzJfdCBwYXlsb2FkKQotICAgIHsKLSAgICAgICAgdS5hc0JpdHMudGFnID0g
dGFnOwotICAgICAgICB1LmFzQml0cy5wYXlsb2FkID0gcGF5bG9hZDsKLSAgICB9Ci0jZW5kaWYK
LQotICAgIGlubGluZSBib29sIEpTVmFsdWU6OmlzTnVtYmVyKCkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBpc0ludDMyKCkgfHwgaXNEb3VibGUoKTsKLSAgICB9Ci0KLSAgICBpbmxpbmUg
Ym9vbCBKU1ZhbHVlOjppc0Jvb2xlYW4oKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGlz
VHJ1ZSgpIHx8IGlzRmFsc2UoKTsKLSAgICB9Ci0KLSAgICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjph
c0Jvb2xlYW4oKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGlzQm9vbGVhbigpKTsKLSAg
ICAgICAgcmV0dXJuIHBheWxvYWQoKTsKLSAgICB9Ci0KLSNlbHNlIC8vICFVU0UoSlNWQUxVRTMy
XzY0KSBpLmUuIFVTRShKU1ZBTFVFNjQpCi0KLSAgICAvLyAweDAgY2FuIG5ldmVyIG9jY3VyIG5h
dHVyYWxseSBiZWNhdXNlIGl0IGhhcyBhIHRhZyBvZiAwMCwgaW5kaWNhdGluZyBhIHBvaW50ZXIg
dmFsdWUsIGJ1dCBhIHBheWxvYWQgb2YgMHgwLCB3aGljaCBpcyBpbiB0aGUgKGludmFsaWQpIHpl
cm8gcGFnZS4KLSAgICBpbmxpbmUgSlNWYWx1ZTo6SlNWYWx1ZSgpCi0gICAgewotICAgICAgICB1
LmFzSW50NjQgPSBWYWx1ZUVtcHR5OwotICAgIH0KLQotICAgIC8vIDB4NCBjYW4gbmV2ZXIgb2Nj
dXIgbmF0dXJhbGx5IGJlY2F1c2UgaXQgaGFzIGEgdGFnIG9mIDAwLCBpbmRpY2F0aW5nIGEgcG9p
bnRlciB2YWx1ZSwgYnV0IGEgcGF5bG9hZCBvZiAweDQsIHdoaWNoIGlzIGluIHRoZSAoaW52YWxp
ZCkgemVybyBwYWdlLgotICAgIGlubGluZSBKU1ZhbHVlOjpKU1ZhbHVlKEhhc2hUYWJsZURlbGV0
ZWRWYWx1ZVRhZykKLSAgICB7Ci0gICAgICAgIHUuYXNJbnQ2NCA9IFZhbHVlRGVsZXRlZDsKLSAg
ICB9Ci0KLSAgICBpbmxpbmUgSlNWYWx1ZTo6SlNWYWx1ZShKU0NlbGwqIHB0cikKLSAgICB7Ci0g
ICAgICAgIHUuYXNJbnQ2NCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihwdHIpOwotICAg
IH0KLQotICAgIGlubGluZSBKU1ZhbHVlOjpKU1ZhbHVlKGNvbnN0IEpTQ2VsbCogcHRyKQotICAg
IHsKLSAgICAgICAgdS5hc0ludDY0ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGNvbnN0
X2Nhc3Q8SlNDZWxsKj4ocHRyKSk7Ci0gICAgfQotCi0gICAgaW5saW5lIEpTVmFsdWU6Om9wZXJh
dG9yIGJvb2woKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIHUuYXNJbnQ2NDsKLSAgICB9
Ci0KLSAgICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjpvcGVyYXRvcj09KGNvbnN0IEpTVmFsdWUmIG90
aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIHUuYXNJbnQ2NCA9PSBvdGhlci51LmFz
SW50NjQ7Ci0gICAgfQotCi0gICAgaW5saW5lIGJvb2wgSlNWYWx1ZTo6b3BlcmF0b3IhPShjb25z
dCBKU1ZhbHVlJiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiB1LmFzSW50NjQg
IT0gb3RoZXIudS5hc0ludDY0OwotICAgIH0KLQotICAgIGlubGluZSBib29sIEpTVmFsdWU6Omlz
RW1wdHkoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIHUuYXNJbnQ2NCA9PSBWYWx1ZUVt
cHR5OwotICAgIH0KLQotICAgIGlubGluZSBib29sIEpTVmFsdWU6OmlzVW5kZWZpbmVkKCkgY29u
c3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBhc1ZhbHVlKCkgPT0gSlNWYWx1ZShKU1VuZGVmaW5l
ZCk7Ci0gICAgfQotCi0gICAgaW5saW5lIGJvb2wgSlNWYWx1ZTo6aXNOdWxsKCkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBhc1ZhbHVlKCkgPT0gSlNWYWx1ZShKU051bGwpOwotICAgIH0K
LQotICAgIGlubGluZSBib29sIEpTVmFsdWU6OmlzVHJ1ZSgpIGNvbnN0Ci0gICAgewotICAgICAg
ICByZXR1cm4gYXNWYWx1ZSgpID09IEpTVmFsdWUoSlNUcnVlKTsKLSAgICB9Ci0KLSAgICBpbmxp
bmUgYm9vbCBKU1ZhbHVlOjppc0ZhbHNlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBh
c1ZhbHVlKCkgPT0gSlNWYWx1ZShKU0ZhbHNlKTsKLSAgICB9Ci0KLSAgICBpbmxpbmUgYm9vbCBK
U1ZhbHVlOjphc0Jvb2xlYW4oKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGlzQm9vbGVh
bigpKTsKLSAgICAgICAgcmV0dXJuIGFzVmFsdWUoKSA9PSBKU1ZhbHVlKEpTVHJ1ZSk7Ci0gICAg
fQotCi0gICAgaW5saW5lIGludDMyX3QgSlNWYWx1ZTo6YXNJbnQzMigpIGNvbnN0Ci0gICAgewot
ICAgICAgICBBU1NFUlQoaXNJbnQzMigpKTsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGlu
dDMyX3Q+KHUuYXNJbnQ2NCk7Ci0gICAgfQotCi0gICAgaW5saW5lIGJvb2wgSlNWYWx1ZTo6aXNE
b3VibGUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGlzTnVtYmVyKCkgJiYgIWlzSW50
MzIoKTsKLSAgICB9Ci0KLSAgICBpbmxpbmUgSlNWYWx1ZTo6SlNWYWx1ZShKU051bGxUYWcpCi0g
ICAgewotICAgICAgICB1LmFzSW50NjQgPSBWYWx1ZU51bGw7Ci0gICAgfQotICAgIAotICAgIGlu
bGluZSBKU1ZhbHVlOjpKU1ZhbHVlKEpTVW5kZWZpbmVkVGFnKQotICAgIHsKLSAgICAgICAgdS5h
c0ludDY0ID0gVmFsdWVVbmRlZmluZWQ7Ci0gICAgfQotCi0gICAgaW5saW5lIEpTVmFsdWU6OkpT
VmFsdWUoSlNUcnVlVGFnKQotICAgIHsKLSAgICAgICAgdS5hc0ludDY0ID0gVmFsdWVUcnVlOwot
ICAgIH0KLQotICAgIGlubGluZSBKU1ZhbHVlOjpKU1ZhbHVlKEpTRmFsc2VUYWcpCi0gICAgewot
ICAgICAgICB1LmFzSW50NjQgPSBWYWx1ZUZhbHNlOwotICAgIH0KLQotICAgIGlubGluZSBib29s
IEpTVmFsdWU6OmlzVW5kZWZpbmVkT3JOdWxsKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIC8vIFVu
ZGVmaW5lZCBhbmQgbnVsbCBzaGFyZSB0aGUgc2FtZSB2YWx1ZSwgYmFyIHRoZSAndW5kZWZpbmVk
JyBiaXQgaW4gdGhlIGV4dGVuZGVkIHRhZy4KLSAgICAgICAgcmV0dXJuICh1LmFzSW50NjQgJiB+
VGFnQml0VW5kZWZpbmVkKSA9PSBWYWx1ZU51bGw7Ci0gICAgfQotCi0gICAgaW5saW5lIGJvb2wg
SlNWYWx1ZTo6aXNCb29sZWFuKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiAodS5hc0lu
dDY0ICYgfjEpID09IFZhbHVlRmFsc2U7Ci0gICAgfQotCi0gICAgaW5saW5lIGJvb2wgSlNWYWx1
ZTo6aXNDZWxsKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiAhKHUuYXNJbnQ2NCAmIFRh
Z01hc2spOwotICAgIH0KLQotICAgIGlubGluZSBib29sIEpTVmFsdWU6OmlzSW50MzIoKSBjb25z
dAotICAgIHsKLSAgICAgICAgcmV0dXJuICh1LmFzSW50NjQgJiBUYWdUeXBlTnVtYmVyKSA9PSBU
YWdUeXBlTnVtYmVyOwotICAgIH0KLQotICAgIGlubGluZSBpbnQ2NF90IHJlaW50ZXJwcmV0RG91
YmxlVG9JbnQ2NChkb3VibGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gYml0d2lzZV9j
YXN0PGludDY0X3Q+KHZhbHVlKTsKLSAgICB9Ci0gICAgaW5saW5lIGRvdWJsZSByZWludGVycHJl
dEludDY0VG9Eb3VibGUoaW50NjRfdCB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBiaXR3
aXNlX2Nhc3Q8ZG91YmxlPih2YWx1ZSk7Ci0gICAgfQotCi0gICAgQUxXQVlTX0lOTElORSBKU1Zh
bHVlOjpKU1ZhbHVlKEVuY29kZUFzRG91YmxlVGFnLCBkb3VibGUgZCkKLSAgICB7Ci0gICAgICAg
IHUuYXNJbnQ2NCA9IHJlaW50ZXJwcmV0RG91YmxlVG9JbnQ2NChkKSArIERvdWJsZUVuY29kZU9m
ZnNldDsKLSAgICB9Ci0KLSAgICBpbmxpbmUgSlNWYWx1ZTo6SlNWYWx1ZShpbnQgaSkKLSAgICB7
Ci0gICAgICAgIHUuYXNJbnQ2NCA9IFRhZ1R5cGVOdW1iZXIgfCBzdGF0aWNfY2FzdDx1aW50MzJf
dD4oaSk7Ci0gICAgfQotCi0gICAgaW5saW5lIGRvdWJsZSBKU1ZhbHVlOjphc0RvdWJsZSgpIGNv
bnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoaXNEb3VibGUoKSk7Ci0gICAgICAgIHJldHVybiBy
ZWludGVycHJldEludDY0VG9Eb3VibGUodS5hc0ludDY0IC0gRG91YmxlRW5jb2RlT2Zmc2V0KTsK
LSAgICB9Ci0KLSAgICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjppc051bWJlcigpIGNvbnN0Ci0gICAg
ewotICAgICAgICByZXR1cm4gdS5hc0ludDY0ICYgVGFnVHlwZU51bWJlcjsKLSAgICB9Ci0KLSAg
ICBBTFdBWVNfSU5MSU5FIEpTQ2VsbCogSlNWYWx1ZTo6YXNDZWxsKCkgY29uc3QKLSAgICB7Ci0g
ICAgICAgIEFTU0VSVChpc0NlbGwoKSk7Ci0gICAgICAgIHJldHVybiB1LnB0cjsKLSAgICB9Ci0K
LSNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlm
IC8vIEpTVmFsdWVJbmxpbmVNZXRob2RzX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTVmFsdWVJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNWYWx1ZUlubGluZXMuaAkocmV2aXNpb24gMTMzOTU1KQkoZnJvbSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlSW5saW5lTWV0aG9kcy5oOjEzMzk1NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFsdWVJbmxpbmVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw0OTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU1ZhbHVlSW5saW5lTWV0aG9kc19oCisjZGVmaW5l
IEpTVmFsdWVJbmxpbmVNZXRob2RzX2gKKworI2luY2x1ZGUgIkpTVmFsdWUuaCIKKworbmFtZXNw
YWNlIEpTQyB7CisKKyAgICBBTFdBWVNfSU5MSU5FIGludDMyX3QgSlNWYWx1ZTo6dG9JbnQzMihF
eGVjU3RhdGUqIGV4ZWMpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXNJbnQzMigpKQorICAg
ICAgICAgICAgcmV0dXJuIGFzSW50MzIoKTsKKyAgICAgICAgcmV0dXJuIEpTQzo6dG9JbnQzMih0
b051bWJlcihleGVjKSk7CisgICAgfQorCisgICAgaW5saW5lIHVpbnQzMl90IEpTVmFsdWU6OnRv
VUludDMyKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKKyAgICB7CisgICAgICAgIC8vIFNlZSBjb21t
ZW50IG9uIEpTQzo6dG9VSW50MzIsIGFib3ZlLgorICAgICAgICByZXR1cm4gdG9JbnQzMihleGVj
KTsKKyAgICB9CisKKyAgICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjppc1VJbnQzMigpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gaXNJbnQzMigpICYmIGFzSW50MzIoKSA+PSAwOworICAgIH0K
KworICAgIGlubGluZSB1aW50MzJfdCBKU1ZhbHVlOjphc1VJbnQzMigpIGNvbnN0CisgICAgewor
ICAgICAgICBBU1NFUlQoaXNVSW50MzIoKSk7CisgICAgICAgIHJldHVybiBhc0ludDMyKCk7Cisg
ICAgfQorCisgICAgaW5saW5lIGRvdWJsZSBKU1ZhbHVlOjphc051bWJlcigpIGNvbnN0CisgICAg
eworICAgICAgICBBU1NFUlQoaXNOdW1iZXIoKSk7CisgICAgICAgIHJldHVybiBpc0ludDMyKCkg
PyBhc0ludDMyKCkgOiBhc0RvdWJsZSgpOworICAgIH0KKworICAgIGlubGluZSBKU1ZhbHVlIGpz
TmFOKCkKKyAgICB7CisgICAgICAgIHJldHVybiBKU1ZhbHVlKFFOYU4pOworICAgIH0KKworICAg
IGlubGluZSBKU1ZhbHVlOjpKU1ZhbHVlKGNoYXIgaSkKKyAgICB7CisgICAgICAgICp0aGlzID0g
SlNWYWx1ZShzdGF0aWNfY2FzdDxpbnQzMl90PihpKSk7CisgICAgfQorCisgICAgaW5saW5lIEpT
VmFsdWU6OkpTVmFsdWUodW5zaWduZWQgY2hhciBpKQorICAgIHsKKyAgICAgICAgKnRoaXMgPSBK
U1ZhbHVlKHN0YXRpY19jYXN0PGludDMyX3Q+KGkpKTsKKyAgICB9CisKKyAgICBpbmxpbmUgSlNW
YWx1ZTo6SlNWYWx1ZShzaG9ydCBpKQorICAgIHsKKyAgICAgICAgKnRoaXMgPSBKU1ZhbHVlKHN0
YXRpY19jYXN0PGludDMyX3Q+KGkpKTsKKyAgICB9CisKKyAgICBpbmxpbmUgSlNWYWx1ZTo6SlNW
YWx1ZSh1bnNpZ25lZCBzaG9ydCBpKQorICAgIHsKKyAgICAgICAgKnRoaXMgPSBKU1ZhbHVlKHN0
YXRpY19jYXN0PGludDMyX3Q+KGkpKTsKKyAgICB9CisKKyAgICBpbmxpbmUgSlNWYWx1ZTo6SlNW
YWx1ZSh1bnNpZ25lZCBpKQorICAgIHsKKyAgICAgICAgaWYgKHN0YXRpY19jYXN0PGludDMyX3Q+
KGkpIDwgMCkgeworICAgICAgICAgICAgKnRoaXMgPSBKU1ZhbHVlKEVuY29kZUFzRG91YmxlLCBz
dGF0aWNfY2FzdDxkb3VibGU+KGkpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgICAgICAqdGhpcyA9IEpTVmFsdWUoc3RhdGljX2Nhc3Q8aW50MzJfdD4oaSkpOworICAgIH0K
KworICAgIGlubGluZSBKU1ZhbHVlOjpKU1ZhbHVlKGxvbmcgaSkKKyAgICB7CisgICAgICAgIGlm
IChzdGF0aWNfY2FzdDxpbnQzMl90PihpKSAhPSBpKSB7CisgICAgICAgICAgICAqdGhpcyA9IEpT
VmFsdWUoRW5jb2RlQXNEb3VibGUsIHN0YXRpY19jYXN0PGRvdWJsZT4oaSkpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgICp0aGlzID0gSlNWYWx1ZShzdGF0aWNfY2Fz
dDxpbnQzMl90PihpKSk7CisgICAgfQorCisgICAgaW5saW5lIEpTVmFsdWU6OkpTVmFsdWUodW5z
aWduZWQgbG9uZyBpKQorICAgIHsKKyAgICAgICAgaWYgKHN0YXRpY19jYXN0PHVpbnQzMl90Pihp
KSAhPSBpKSB7CisgICAgICAgICAgICAqdGhpcyA9IEpTVmFsdWUoRW5jb2RlQXNEb3VibGUsIHN0
YXRpY19jYXN0PGRvdWJsZT4oaSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgICp0aGlzID0gSlNWYWx1ZShzdGF0aWNfY2FzdDx1aW50MzJfdD4oaSkpOworICAgIH0K
KworICAgIGlubGluZSBKU1ZhbHVlOjpKU1ZhbHVlKGxvbmcgbG9uZyBpKQorICAgIHsKKyAgICAg
ICAgaWYgKHN0YXRpY19jYXN0PGludDMyX3Q+KGkpICE9IGkpIHsKKyAgICAgICAgICAgICp0aGlz
ID0gSlNWYWx1ZShFbmNvZGVBc0RvdWJsZSwgc3RhdGljX2Nhc3Q8ZG91YmxlPihpKSk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgKnRoaXMgPSBKU1ZhbHVlKHN0YXRp
Y19jYXN0PGludDMyX3Q+KGkpKTsKKyAgICB9CisKKyAgICBpbmxpbmUgSlNWYWx1ZTo6SlNWYWx1
ZSh1bnNpZ25lZCBsb25nIGxvbmcgaSkKKyAgICB7CisgICAgICAgIGlmIChzdGF0aWNfY2FzdDx1
aW50MzJfdD4oaSkgIT0gaSkgeworICAgICAgICAgICAgKnRoaXMgPSBKU1ZhbHVlKEVuY29kZUFz
RG91YmxlLCBzdGF0aWNfY2FzdDxkb3VibGU+KGkpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICAqdGhpcyA9IEpTVmFsdWUoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGkp
KTsKKyAgICB9CisKKyAgICBpbmxpbmUgSlNWYWx1ZTo6SlNWYWx1ZShkb3VibGUgZCkKKyAgICB7
CisgICAgICAgIGNvbnN0IGludDMyX3QgYXNJbnQzMiA9IHN0YXRpY19jYXN0PGludDMyX3Q+KGQp
OworICAgICAgICBpZiAoYXNJbnQzMiAhPSBkIHx8ICghYXNJbnQzMiAmJiBzaWduYml0KGQpKSkg
eyAvLyB0cnVlIGZvciAtMC4wCisgICAgICAgICAgICAqdGhpcyA9IEpTVmFsdWUoRW5jb2RlQXNE
b3VibGUsIGQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgICp0aGlz
ID0gSlNWYWx1ZShzdGF0aWNfY2FzdDxpbnQzMl90PihkKSk7CisgICAgfQorCisgICAgaW5saW5l
IEVuY29kZWRKU1ZhbHVlIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHZhbHVlLnUuYXNJbnQ2NDsKKyAgICB9CisKKyAgICBpbmxpbmUgSlNWYWx1
ZSBKU1ZhbHVlOjpkZWNvZGUoRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEpTVmFsdWUpCisgICAgewor
ICAgICAgICBKU1ZhbHVlIHY7CisgICAgICAgIHYudS5hc0ludDY0ID0gZW5jb2RlZEpTVmFsdWU7
CisgICAgICAgIHJldHVybiB2OworICAgIH0KKworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAg
aW5saW5lIEpTVmFsdWU6OkpTVmFsdWUoKQorICAgIHsKKyAgICAgICAgdS5hc0JpdHMudGFnID0g
RW1wdHlWYWx1ZVRhZzsKKyAgICAgICAgdS5hc0JpdHMucGF5bG9hZCA9IDA7CisgICAgfQorCisg
ICAgaW5saW5lIEpTVmFsdWU6OkpTVmFsdWUoSlNOdWxsVGFnKQorICAgIHsKKyAgICAgICAgdS5h
c0JpdHMudGFnID0gTnVsbFRhZzsKKyAgICAgICAgdS5hc0JpdHMucGF5bG9hZCA9IDA7CisgICAg
fQorICAgIAorICAgIGlubGluZSBKU1ZhbHVlOjpKU1ZhbHVlKEpTVW5kZWZpbmVkVGFnKQorICAg
IHsKKyAgICAgICAgdS5hc0JpdHMudGFnID0gVW5kZWZpbmVkVGFnOworICAgICAgICB1LmFzQml0
cy5wYXlsb2FkID0gMDsKKyAgICB9CisgICAgCisgICAgaW5saW5lIEpTVmFsdWU6OkpTVmFsdWUo
SlNUcnVlVGFnKQorICAgIHsKKyAgICAgICAgdS5hc0JpdHMudGFnID0gQm9vbGVhblRhZzsKKyAg
ICAgICAgdS5hc0JpdHMucGF5bG9hZCA9IDE7CisgICAgfQorICAgIAorICAgIGlubGluZSBKU1Zh
bHVlOjpKU1ZhbHVlKEpTRmFsc2VUYWcpCisgICAgeworICAgICAgICB1LmFzQml0cy50YWcgPSBC
b29sZWFuVGFnOworICAgICAgICB1LmFzQml0cy5wYXlsb2FkID0gMDsKKyAgICB9CisKKyAgICBp
bmxpbmUgSlNWYWx1ZTo6SlNWYWx1ZShIYXNoVGFibGVEZWxldGVkVmFsdWVUYWcpCisgICAgewor
ICAgICAgICB1LmFzQml0cy50YWcgPSBEZWxldGVkVmFsdWVUYWc7CisgICAgICAgIHUuYXNCaXRz
LnBheWxvYWQgPSAwOworICAgIH0KKworICAgIGlubGluZSBKU1ZhbHVlOjpKU1ZhbHVlKEpTQ2Vs
bCogcHRyKQorICAgIHsKKyAgICAgICAgaWYgKHB0cikKKyAgICAgICAgICAgIHUuYXNCaXRzLnRh
ZyA9IENlbGxUYWc7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHUuYXNCaXRzLnRhZyA9IEVt
cHR5VmFsdWVUYWc7CisgICAgICAgIHUuYXNCaXRzLnBheWxvYWQgPSByZWludGVycHJldF9jYXN0
PGludDMyX3Q+KHB0cik7CisgICAgfQorCisgICAgaW5saW5lIEpTVmFsdWU6OkpTVmFsdWUoY29u
c3QgSlNDZWxsKiBwdHIpCisgICAgeworICAgICAgICBpZiAocHRyKQorICAgICAgICAgICAgdS5h
c0JpdHMudGFnID0gQ2VsbFRhZzsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdS5hc0JpdHMu
dGFnID0gRW1wdHlWYWx1ZVRhZzsKKyAgICAgICAgdS5hc0JpdHMucGF5bG9hZCA9IHJlaW50ZXJw
cmV0X2Nhc3Q8aW50MzJfdD4oY29uc3RfY2FzdDxKU0NlbGwqPihwdHIpKTsKKyAgICB9CisKKyAg
ICBpbmxpbmUgSlNWYWx1ZTo6b3BlcmF0b3IgYm9vbCgpIGNvbnN0CisgICAgeworICAgICAgICBB
U1NFUlQodGFnKCkgIT0gRGVsZXRlZFZhbHVlVGFnKTsKKyAgICAgICAgcmV0dXJuIHRhZygpICE9
IEVtcHR5VmFsdWVUYWc7CisgICAgfQorCisgICAgaW5saW5lIGJvb2wgSlNWYWx1ZTo6b3BlcmF0
b3I9PShjb25zdCBKU1ZhbHVlJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB1
LmFzSW50NjQgPT0gb3RoZXIudS5hc0ludDY0OworICAgIH0KKworICAgIGlubGluZSBib29sIEpT
VmFsdWU6Om9wZXJhdG9yIT0oY29uc3QgSlNWYWx1ZSYgb3RoZXIpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gdS5hc0ludDY0ICE9IG90aGVyLnUuYXNJbnQ2NDsKKyAgICB9CisKKyAgICBp
bmxpbmUgYm9vbCBKU1ZhbHVlOjppc0VtcHR5KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biB0YWcoKSA9PSBFbXB0eVZhbHVlVGFnOworICAgIH0KKworICAgIGlubGluZSBib29sIEpTVmFs
dWU6OmlzVW5kZWZpbmVkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0YWcoKSA9PSBV
bmRlZmluZWRUYWc7CisgICAgfQorCisgICAgaW5saW5lIGJvb2wgSlNWYWx1ZTo6aXNOdWxsKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0YWcoKSA9PSBOdWxsVGFnOworICAgIH0KKwor
ICAgIGlubGluZSBib29sIEpTVmFsdWU6OmlzVW5kZWZpbmVkT3JOdWxsKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBpc1VuZGVmaW5lZCgpIHx8IGlzTnVsbCgpOworICAgIH0KKworICAg
IGlubGluZSBib29sIEpTVmFsdWU6OmlzQ2VsbCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gdGFnKCkgPT0gQ2VsbFRhZzsKKyAgICB9CisKKyAgICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjpp
c0ludDMyKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0YWcoKSA9PSBJbnQzMlRhZzsK
KyAgICB9CisKKyAgICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjppc0RvdWJsZSgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gdGFnKCkgPCBMb3dlc3RUYWc7CisgICAgfQorCisgICAgaW5saW5l
IGJvb2wgSlNWYWx1ZTo6aXNUcnVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0YWco
KSA9PSBCb29sZWFuVGFnICYmIHBheWxvYWQoKTsKKyAgICB9CisKKyAgICBpbmxpbmUgYm9vbCBK
U1ZhbHVlOjppc0ZhbHNlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0YWcoKSA9PSBC
b29sZWFuVGFnICYmICFwYXlsb2FkKCk7CisgICAgfQorCisgICAgaW5saW5lIHVpbnQzMl90IEpT
VmFsdWU6OnRhZygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdS5hc0JpdHMudGFnOwor
ICAgIH0KKyAgICAKKyAgICBpbmxpbmUgaW50MzJfdCBKU1ZhbHVlOjpwYXlsb2FkKCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiB1LmFzQml0cy5wYXlsb2FkOworICAgIH0KKyAgICAKKyAg
ICBpbmxpbmUgaW50MzJfdCBKU1ZhbHVlOjphc0ludDMyKCkgY29uc3QKKyAgICB7CisgICAgICAg
IEFTU0VSVChpc0ludDMyKCkpOworICAgICAgICByZXR1cm4gdS5hc0JpdHMucGF5bG9hZDsKKyAg
ICB9CisgICAgCisgICAgaW5saW5lIGRvdWJsZSBKU1ZhbHVlOjphc0RvdWJsZSgpIGNvbnN0Cisg
ICAgeworICAgICAgICBBU1NFUlQoaXNEb3VibGUoKSk7CisgICAgICAgIHJldHVybiB1LmFzRG91
YmxlOworICAgIH0KKyAgICAKKyAgICBBTFdBWVNfSU5MSU5FIEpTQ2VsbCogSlNWYWx1ZTo6YXND
ZWxsKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0NlbGwoKSk7CisgICAgICAgIHJl
dHVybiByZWludGVycHJldF9jYXN0PEpTQ2VsbCo+KHUuYXNCaXRzLnBheWxvYWQpOworICAgIH0K
KworICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZTo6SlNWYWx1ZShFbmNvZGVBc0RvdWJsZVRhZywg
ZG91YmxlIGQpCisgICAgeworICAgICAgICB1LmFzRG91YmxlID0gZDsKKyAgICB9CisKKyAgICBp
bmxpbmUgSlNWYWx1ZTo6SlNWYWx1ZShpbnQgaSkKKyAgICB7CisgICAgICAgIHUuYXNCaXRzLnRh
ZyA9IEludDMyVGFnOworICAgICAgICB1LmFzQml0cy5wYXlsb2FkID0gaTsKKyAgICB9CisKKyNp
ZiBFTkFCTEUoTExJTlRfQ19MT09QKQorICAgIGlubGluZSBKU1ZhbHVlOjpKU1ZhbHVlKGludDMy
X3QgdGFnLCBpbnQzMl90IHBheWxvYWQpCisgICAgeworICAgICAgICB1LmFzQml0cy50YWcgPSB0
YWc7CisgICAgICAgIHUuYXNCaXRzLnBheWxvYWQgPSBwYXlsb2FkOworICAgIH0KKyNlbmRpZgor
CisgICAgaW5saW5lIGJvb2wgSlNWYWx1ZTo6aXNOdW1iZXIoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGlzSW50MzIoKSB8fCBpc0RvdWJsZSgpOworICAgIH0KKworICAgIGlubGluZSBi
b29sIEpTVmFsdWU6OmlzQm9vbGVhbigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNU
cnVlKCkgfHwgaXNGYWxzZSgpOworICAgIH0KKworICAgIGlubGluZSBib29sIEpTVmFsdWU6OmFz
Qm9vbGVhbigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNCb29sZWFuKCkpOworICAg
ICAgICByZXR1cm4gcGF5bG9hZCgpOworICAgIH0KKworI2Vsc2UgLy8gIVVTRShKU1ZBTFVFMzJf
NjQpIGkuZS4gVVNFKEpTVkFMVUU2NCkKKworICAgIC8vIDB4MCBjYW4gbmV2ZXIgb2NjdXIgbmF0
dXJhbGx5IGJlY2F1c2UgaXQgaGFzIGEgdGFnIG9mIDAwLCBpbmRpY2F0aW5nIGEgcG9pbnRlciB2
YWx1ZSwgYnV0IGEgcGF5bG9hZCBvZiAweDAsIHdoaWNoIGlzIGluIHRoZSAoaW52YWxpZCkgemVy
byBwYWdlLgorICAgIGlubGluZSBKU1ZhbHVlOjpKU1ZhbHVlKCkKKyAgICB7CisgICAgICAgIHUu
YXNJbnQ2NCA9IFZhbHVlRW1wdHk7CisgICAgfQorCisgICAgLy8gMHg0IGNhbiBuZXZlciBvY2N1
ciBuYXR1cmFsbHkgYmVjYXVzZSBpdCBoYXMgYSB0YWcgb2YgMDAsIGluZGljYXRpbmcgYSBwb2lu
dGVyIHZhbHVlLCBidXQgYSBwYXlsb2FkIG9mIDB4NCwgd2hpY2ggaXMgaW4gdGhlIChpbnZhbGlk
KSB6ZXJvIHBhZ2UuCisgICAgaW5saW5lIEpTVmFsdWU6OkpTVmFsdWUoSGFzaFRhYmxlRGVsZXRl
ZFZhbHVlVGFnKQorICAgIHsKKyAgICAgICAgdS5hc0ludDY0ID0gVmFsdWVEZWxldGVkOworICAg
IH0KKworICAgIGlubGluZSBKU1ZhbHVlOjpKU1ZhbHVlKEpTQ2VsbCogcHRyKQorICAgIHsKKyAg
ICAgICAgdS5hc0ludDY0ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHB0cik7CisgICAg
fQorCisgICAgaW5saW5lIEpTVmFsdWU6OkpTVmFsdWUoY29uc3QgSlNDZWxsKiBwdHIpCisgICAg
eworICAgICAgICB1LmFzSW50NjQgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oY29uc3Rf
Y2FzdDxKU0NlbGwqPihwdHIpKTsKKyAgICB9CisKKyAgICBpbmxpbmUgSlNWYWx1ZTo6b3BlcmF0
b3IgYm9vbCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdS5hc0ludDY0OworICAgIH0K
KworICAgIGlubGluZSBib29sIEpTVmFsdWU6Om9wZXJhdG9yPT0oY29uc3QgSlNWYWx1ZSYgb3Ro
ZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdS5hc0ludDY0ID09IG90aGVyLnUuYXNJ
bnQ2NDsKKyAgICB9CisKKyAgICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjpvcGVyYXRvciE9KGNvbnN0
IEpTVmFsdWUmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHUuYXNJbnQ2NCAh
PSBvdGhlci51LmFzSW50NjQ7CisgICAgfQorCisgICAgaW5saW5lIGJvb2wgSlNWYWx1ZTo6aXNF
bXB0eSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdS5hc0ludDY0ID09IFZhbHVlRW1w
dHk7CisgICAgfQorCisgICAgaW5saW5lIGJvb2wgSlNWYWx1ZTo6aXNVbmRlZmluZWQoKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIGFzVmFsdWUoKSA9PSBKU1ZhbHVlKEpTVW5kZWZpbmVk
KTsKKyAgICB9CisKKyAgICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjppc051bGwoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIGFzVmFsdWUoKSA9PSBKU1ZhbHVlKEpTTnVsbCk7CisgICAgfQor
CisgICAgaW5saW5lIGJvb2wgSlNWYWx1ZTo6aXNUcnVlKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBhc1ZhbHVlKCkgPT0gSlNWYWx1ZShKU1RydWUpOworICAgIH0KKworICAgIGlubGlu
ZSBib29sIEpTVmFsdWU6OmlzRmFsc2UoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGFz
VmFsdWUoKSA9PSBKU1ZhbHVlKEpTRmFsc2UpOworICAgIH0KKworICAgIGlubGluZSBib29sIEpT
VmFsdWU6OmFzQm9vbGVhbigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNCb29sZWFu
KCkpOworICAgICAgICByZXR1cm4gYXNWYWx1ZSgpID09IEpTVmFsdWUoSlNUcnVlKTsKKyAgICB9
CisKKyAgICBpbmxpbmUgaW50MzJfdCBKU1ZhbHVlOjphc0ludDMyKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChpc0ludDMyKCkpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50
MzJfdD4odS5hc0ludDY0KTsKKyAgICB9CisKKyAgICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjppc0Rv
dWJsZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNOdW1iZXIoKSAmJiAhaXNJbnQz
MigpOworICAgIH0KKworICAgIGlubGluZSBKU1ZhbHVlOjpKU1ZhbHVlKEpTTnVsbFRhZykKKyAg
ICB7CisgICAgICAgIHUuYXNJbnQ2NCA9IFZhbHVlTnVsbDsKKyAgICB9CisgICAgCisgICAgaW5s
aW5lIEpTVmFsdWU6OkpTVmFsdWUoSlNVbmRlZmluZWRUYWcpCisgICAgeworICAgICAgICB1LmFz
SW50NjQgPSBWYWx1ZVVuZGVmaW5lZDsKKyAgICB9CisKKyAgICBpbmxpbmUgSlNWYWx1ZTo6SlNW
YWx1ZShKU1RydWVUYWcpCisgICAgeworICAgICAgICB1LmFzSW50NjQgPSBWYWx1ZVRydWU7Cisg
ICAgfQorCisgICAgaW5saW5lIEpTVmFsdWU6OkpTVmFsdWUoSlNGYWxzZVRhZykKKyAgICB7Cisg
ICAgICAgIHUuYXNJbnQ2NCA9IFZhbHVlRmFsc2U7CisgICAgfQorCisgICAgaW5saW5lIGJvb2wg
SlNWYWx1ZTo6aXNVbmRlZmluZWRPck51bGwoKSBjb25zdAorICAgIHsKKyAgICAgICAgLy8gVW5k
ZWZpbmVkIGFuZCBudWxsIHNoYXJlIHRoZSBzYW1lIHZhbHVlLCBiYXIgdGhlICd1bmRlZmluZWQn
IGJpdCBpbiB0aGUgZXh0ZW5kZWQgdGFnLgorICAgICAgICByZXR1cm4gKHUuYXNJbnQ2NCAmIH5U
YWdCaXRVbmRlZmluZWQpID09IFZhbHVlTnVsbDsKKyAgICB9CisKKyAgICBpbmxpbmUgYm9vbCBK
U1ZhbHVlOjppc0Jvb2xlYW4oKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICh1LmFzSW50
NjQgJiB+MSkgPT0gVmFsdWVGYWxzZTsKKyAgICB9CisKKyAgICBpbmxpbmUgYm9vbCBKU1ZhbHVl
Ojppc0NlbGwoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEodS5hc0ludDY0ICYgVGFn
TWFzayk7CisgICAgfQorCisgICAgaW5saW5lIGJvb2wgSlNWYWx1ZTo6aXNJbnQzMigpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gKHUuYXNJbnQ2NCAmIFRhZ1R5cGVOdW1iZXIpID09IFRh
Z1R5cGVOdW1iZXI7CisgICAgfQorCisgICAgaW5saW5lIGludDY0X3QgcmVpbnRlcnByZXREb3Vi
bGVUb0ludDY0KGRvdWJsZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nh
c3Q8aW50NjRfdD4odmFsdWUpOworICAgIH0KKyAgICBpbmxpbmUgZG91YmxlIHJlaW50ZXJwcmV0
SW50NjRUb0RvdWJsZShpbnQ2NF90IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJpdHdp
c2VfY2FzdDxkb3VibGU+KHZhbHVlKTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIEpTVmFs
dWU6OkpTVmFsdWUoRW5jb2RlQXNEb3VibGVUYWcsIGRvdWJsZSBkKQorICAgIHsKKyAgICAgICAg
dS5hc0ludDY0ID0gcmVpbnRlcnByZXREb3VibGVUb0ludDY0KGQpICsgRG91YmxlRW5jb2RlT2Zm
c2V0OworICAgIH0KKworICAgIGlubGluZSBKU1ZhbHVlOjpKU1ZhbHVlKGludCBpKQorICAgIHsK
KyAgICAgICAgdS5hc0ludDY0ID0gVGFnVHlwZU51bWJlciB8IHN0YXRpY19jYXN0PHVpbnQzMl90
PihpKTsKKyAgICB9CisKKyAgICBpbmxpbmUgZG91YmxlIEpTVmFsdWU6OmFzRG91YmxlKCkgY29u
c3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0RvdWJsZSgpKTsKKyAgICAgICAgcmV0dXJuIHJl
aW50ZXJwcmV0SW50NjRUb0RvdWJsZSh1LmFzSW50NjQgLSBEb3VibGVFbmNvZGVPZmZzZXQpOwor
ICAgIH0KKworICAgIGlubGluZSBib29sIEpTVmFsdWU6OmlzTnVtYmVyKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiB1LmFzSW50NjQgJiBUYWdUeXBlTnVtYmVyOworICAgIH0KKworICAg
IEFMV0FZU19JTkxJTkUgSlNDZWxsKiBKU1ZhbHVlOjphc0NlbGwoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgQVNTRVJUKGlzQ2VsbCgpKTsKKyAgICAgICAgcmV0dXJuIHUucHRyOworICAgIH0KKwor
I2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpCisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYg
Ly8gSlNWYWx1ZUlubGluZU1ldGhvZHNfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNWYWx1ZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1ZhbHVlSW5saW5lcy5oCShyZXZpc2lvbiAxMzM5NTUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yMyw4ICsyMyw4IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVmIEpTVmFsdWVJ
bmxpbmVNZXRob2RzX2gKLSNkZWZpbmUgSlNWYWx1ZUlubGluZU1ldGhvZHNfaAorI2lmbmRlZiBK
U1ZhbHVlSW5saW5lc19oCisjZGVmaW5lIEpTVmFsdWVJbmxpbmVzX2gKIAogI2luY2x1ZGUgIkpT
VmFsdWUuaCIKIApAQCAtNDkzLDQgKzQ5Myw1IEBAIG5hbWVzcGFjZSBKU0MgewogCiB9IC8vIG5h
bWVzcGFjZSBKU0MKIAotI2VuZGlmIC8vIEpTVmFsdWVJbmxpbmVNZXRob2RzX2gKKyNlbmRpZiAv
LyBKU1ZhbHVlSW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0xpdGVyYWxQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0xpdGVyYWxQYXJzZXIuY3BwCShyZXZpc2lvbiAxMzM5NzMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9MaXRlcmFsUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjcsOCArMjcsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkxpdGVyYWxQYXJz
ZXIuaCIKIAotI2luY2x1ZGUgIkJ1dHRlcmZseUlubGluZU1ldGhvZHMuaCIKLSNpbmNsdWRlICJD
b3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJCdXR0ZXJmbHlJbmxpbmVzLmgi
CisjaW5jbHVkZSAiQ29waWVkU3BhY2VJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNBcnJheS5oIgog
I2luY2x1ZGUgIkpTU3RyaW5nLmgiCiAjaW5jbHVkZSAiTGV4ZXIuaCIKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHAJKHJl
dmlzaW9uIDEzMzk3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdENv
bnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEsOCArMjEsOCBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgiCiAKLSNpbmNsdWRlICJC
dXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgiCi0jaW5jbHVkZSAiQ29waWVkU3BhY2VJbmxpbmVNZXRo
b2RzLmgiCisjaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lcy5oIgorI2luY2x1ZGUgIkNvcGllZFNw
YWNlSW5saW5lcy5oIgogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uSGVs
cGVycy5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL09wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9PcGVyYXRpb25zLmgJKHJldmlzaW9uIDEzMzk3MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjYs
NyArMjYsNyBAQAogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCiAjaW5jbHVkZSAiSlNQcm94eS5o
IgogI2luY2x1ZGUgIkpTU3RyaW5nLmgiCi0jaW5jbHVkZSAiSlNWYWx1ZUlubGluZU1ldGhvZHMu
aCIKKyNpbmNsdWRlICJKU1ZhbHVlSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBNYXRjaGVz
QXJyYXkuY3BwCShyZXZpc2lvbiAxMzM5NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9SZWdFeHBNYXRjaGVzQXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUmVnRXhwTWF0Y2hlc0FycmF5Lmgi
CiAKLSNpbmNsdWRlICJCdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiQnV0dGVy
Zmx5SW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuY3BwCShyZXZpc2lvbiAxMzM5NzMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMSw4ICsyMSw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
UmVnRXhwT2JqZWN0LmgiCiAKLSNpbmNsdWRlICJCdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgiCi0j
aW5jbHVkZSAiQ29waWVkU3BhY2VJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiQnV0dGVyZmx5
SW5saW5lcy5oIgorI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lcy5oIgogI2luY2x1ZGUgIkVy
cm9yLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uSGVscGVycy5oIgogI2luY2x1ZGUgIkpTQXJyYXku
aCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJv
dG90eXBlLmNwcAkocmV2aXNpb24gMTMzOTczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsOSArMjIsOSBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlN0cmluZ1Byb3RvdHlwZS5oIgogCi0j
aW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkJ1dHRlcmZseUlu
bGluZXMuaCIKICNpbmNsdWRlICJDYWNoZWRDYWxsLmgiCi0jaW5jbHVkZSAiQ29waWVkU3BhY2VJ
bmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiQ29waWVkU3BhY2VJbmxpbmVzLmgiCiAjaW5jbHVk
ZSAiRXJyb3IuaCIKICNpbmNsdWRlICJFeGVjdXRhYmxlLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxP
YmplY3RGdW5jdGlvbnMuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMzk3MykKKysrIFNv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMwIEBACisy
MDEyLTExLTA4ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBSZW5h
bWVkIC4uLklubGluZU1ldGhvZHMuaCBmaWxlcyB0byAuLi5JbmxpbmVzLmguCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDExNDUuCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBpcyBvbmx5IGEgcmVm
YWN0b3JpbmcgZWZmb3J0IHRvIHJlbmFtZSB0aGUgZmlsZXMuIFRoZXJlIGFyZSBubworICAgICAg
ICBmdW5jdGlvbmFsaXR5IGNoYW5nZXMuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLgorCisgICAg
ICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAg
ICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJv
ajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAg
ICogaHRtbC9wYXJzZXIvSFRNTEVudGl0eVBhcnNlci5jcHA6CisgICAgICAgICogaHRtbC9wYXJz
ZXIvSFRNTFRva2VuaXplci5jcHA6CisgICAgICAgICogaHRtbC90cmFjay9XZWJWVFRUb2tlbml6
ZXIuY3BwOgorICAgICAgICAqIHhtbC9wYXJzZXIvQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VySW5s
aW5lTWV0aG9kcy5oOiBSZW1vdmVkLgorICAgICAgICAqIHhtbC9wYXJzZXIvQ2hhcmFjdGVyUmVm
ZXJlbmNlUGFyc2VySW5saW5lcy5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS94bWwvcGFy
c2VyL0NoYXJhY3RlclJlZmVyZW5jZVBhcnNlcklubGluZU1ldGhvZHMuaC4KKyAgICAgICAgKiB4
bWwvcGFyc2VyL01hcmt1cFRva2VuaXplcklubGluZU1ldGhvZHMuaDogUmVtb3ZlZC4KKyAgICAg
ICAgKiB4bWwvcGFyc2VyL01hcmt1cFRva2VuaXplcklubGluZXMuaDogQ29waWVkIGZyb20gU291
cmNlL1dlYkNvcmUveG1sL3BhcnNlci9NYXJrdXBUb2tlbml6ZXJJbmxpbmVNZXRob2RzLmguCisg
ICAgICAgICogeG1sL3BhcnNlci9YTUxDaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXIuY3BwOgorICAg
ICAgICAqIHhtbC9wYXJzZXIvWE1MVG9rZW5pemVyLmNwcDoKKwogMjAxMi0xMS0wOCAgQWxwaGEg
TGFtICA8aGNsYW1AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gRGVmZXJyZWQg
aW1hZ2UgZGVjb2RpbmcgZmFpbHMgd2l0aCBpbWFnZSBvcmllbnRhdGlvbgpJbmRleDogU291cmNl
L1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiAxMzM5NzMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC01ODI0LDEwICs1ODI0LDEw
IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJT
Y3JpcHRMb2FkZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJUaHJlYWQuY3Bw
IFwKIAlTb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlclRocmVhZC5oIFwKLQlTb3VyY2UvV2Vi
Q29yZS94bWwvcGFyc2VyL0NoYXJhY3RlclJlZmVyZW5jZVBhcnNlcklubGluZU1ldGhvZHMuaCBc
CisJU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9DaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXJJbmxp
bmVzLmggXAogCVNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvTWFya3VwVG9rZW5CYXNlLmggXAog
CVNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvTWFya3VwVG9rZW5pemVyQmFzZS5oIFwKLQlTb3Vy
Y2UvV2ViQ29yZS94bWwvcGFyc2VyL01hcmt1cFRva2VuaXplcklubGluZU1ldGhvZHMuaCBcCisJ
U291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9NYXJrdXBUb2tlbml6ZXJJbmxpbmVzLmggXAogCVNv
dXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvTmV3WE1MRG9jdW1lbnRQYXJzZXIuY3BwIFwKIAlTb3Vy
Y2UvV2ViQ29yZS94bWwvcGFyc2VyL05ld1hNTERvY3VtZW50UGFyc2VyLmggXAogCVNvdXJjZS9X
ZWJDb3JlL3htbC9wYXJzZXIvWE1MQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VyLmNwcCBcCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L1RhcmdldC5wcmkJKHJldmlzaW9uIDEzMzk3MykKKysrIFNvdXJjZS9XZWJDb3JlL1RhcmdldC5w
cmkJKHdvcmtpbmcgY29weSkKQEAgLTI3MzYsMTAgKzI3MzYsMTAgQEAgSEVBREVSUyArPSBcCiAg
ICAgd29ya2Vycy9Xb3JrZXJSdW5Mb29wLmggXAogICAgIHdvcmtlcnMvV29ya2VyU2NyaXB0TG9h
ZGVyLmggXAogICAgIHdvcmtlcnMvV29ya2VyVGhyZWFkLmggXAotICAgIHhtbC9wYXJzZXIvQ2hh
cmFjdGVyUmVmZXJlbmNlUGFyc2VySW5saW5lTWV0aG9kcy5oIFwKKyAgICB4bWwvcGFyc2VyL0No
YXJhY3RlclJlZmVyZW5jZVBhcnNlcklubGluZXMuaCBcCiAgICAgeG1sL3BhcnNlci9NYXJrdXBU
b2tlbkJhc2UuaCBcCiAgICAgeG1sL3BhcnNlci9NYXJrdXBUb2tlbml6ZXJCYXNlLmggXAotICAg
IHhtbC9wYXJzZXIvTWFya3VwVG9rZW5pemVySW5saW5lTWV0aG9kcy5oIFwKKyAgICB4bWwvcGFy
c2VyL01hcmt1cFRva2VuaXplcklubGluZXMuaCBcCiAgICAgeG1sL3BhcnNlci9OZXdYTUxEb2N1
bWVudFBhcnNlci5oIFwKICAgICB4bWwvcGFyc2VyL1hNTENoYXJhY3RlclJlZmVyZW5jZVBhcnNl
ci5oIFwKICAgICB4bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyLmggXApJbmRleDogU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZ3lwaQkocmV2aXNpb24gMTMzOTczKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBp
CSh3b3JraW5nIGNvcHkpCkBAIC0zNjcwLDEwICszNjcwLDEwIEBACiAgICAgICAgICAgICAnd29y
a2Vycy9Xb3JrZXJTY3JpcHRMb2FkZXIuaCcsCiAgICAgICAgICAgICAnd29ya2Vycy9Xb3JrZXJT
Y3JpcHRMb2FkZXJDbGllbnQuaCcsCiAgICAgICAgICAgICAnd29ya2Vycy9Xb3JrZXJUaHJlYWQu
Y3BwJywKLSAgICAgICAgICAgICd4bWwvcGFyc2VyL0NoYXJhY3RlclJlZmVyZW5jZVBhcnNlcklu
bGluZU1ldGhvZHMuaCcsCisgICAgICAgICAgICAneG1sL3BhcnNlci9DaGFyYWN0ZXJSZWZlcmVu
Y2VQYXJzZXJJbmxpbmVzLmgnLAogICAgICAgICAgICAgJ3htbC9wYXJzZXIvTWFya3VwVG9rZW5C
YXNlLmgnLAogICAgICAgICAgICAgJ3htbC9wYXJzZXIvTWFya3VwVG9rZW5pemVyQmFzZS5oJywK
LSAgICAgICAgICAgICd4bWwvcGFyc2VyL01hcmt1cFRva2VuaXplcklubGluZU1ldGhvZHMuaCcs
CisgICAgICAgICAgICAneG1sL3BhcnNlci9NYXJrdXBUb2tlbml6ZXJJbmxpbmVzLmgnLAogICAg
ICAgICAgICAgJ3htbC9wYXJzZXIvTmV3WE1MRG9jdW1lbnRQYXJzZXIuY3BwJywKICAgICAgICAg
ICAgICd4bWwvcGFyc2VyL05ld1hNTERvY3VtZW50UGFyc2VyLmgnLAogICAgICAgICAgICAgJ3ht
bC9wYXJzZXIvWE1MQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VyLmNwcCcsCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24gMTMzOTcz
KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtp
bmcgY29weSkKQEAgLTQ4Mzk4LDcgKzQ4Mzk4LDcgQEAKIAkJCQlOYW1lPSJwYXJzZXIiCiAJCQkJ
PgogCQkJCTxGaWxlCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5ceG1sXHBhcnNlclxDaGFyYWN0ZXJS
ZWZlcmVuY2VJbmxpbmVNZXRob2RzLmgiCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ceG1sXHBhcnNl
clxDaGFyYWN0ZXJSZWZlcmVuY2VJbmxpbmVzLmgiCiAJCQkJCT4KIAkJCQk8L0ZpbGU+CiAJCQkJ
PEZpbGUKQEAgLTQ4NDEwLDcgKzQ4NDEwLDcgQEAKIAkJCQkJPgogCQkJCTwvRmlsZT4KIAkJCQk8
RmlsZQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHhtbFxwYXJzZXJcTWFya3VwVG9rZW5pemVySW5s
aW5lTWV0aG9kcy5oIgorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHhtbFxwYXJzZXJcTWFya3VwVG9r
ZW5pemVySW5saW5lcy5oIgogCQkJCQk+CiAJCQkJPC9GaWxlPgogCQkJCTxGaWxlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShy
ZXZpc2lvbiAxMzM5NzMpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAKIC8qIEVuZCBQQlhB
Z2dyZWdhdGVUYXJnZXQgc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhCdWlsZEZpbGUgc2VjdGlv
biAqLwotCQkwMDAyMkU2OTEzQ0UxQkJBMDAyODJENUIgLyogQ2hhcmFjdGVyUmVmZXJlbmNlUGFy
c2VySW5saW5lTWV0aG9kcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMDAwMjJFNjgxM0NFMUJCQTAwMjgyRDVCIC8qIENoYXJhY3RlclJlZmVyZW5jZVBh
cnNlcklubGluZU1ldGhvZHMuaCAqLzsgfTsKKwkJMDAwMjJFNjkxM0NFMUJCQTAwMjgyRDVCIC8q
IENoYXJhY3RlclJlZmVyZW5jZVBhcnNlcklubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDAwMDIyRTY4MTNDRTFCQkEwMDI4MkQ1QiAvKiBDaGFy
YWN0ZXJSZWZlcmVuY2VQYXJzZXJJbmxpbmVzLmggKi87IH07CiAJCTAwMDJFQzU4MTNDM0Y2N0Qw
MDA0MEQ0NyAvKiBYTUxUb2tlbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMDAwMkVDNTUxM0MzRjY3RDAwMDQwRDQ3IC8qIFhNTFRva2VuLmggKi87IH07
CiAJCTAwMDJFQzU5MTNDM0Y2N0QwMDA0MEQ0NyAvKiBYTUxUb2tlbml6ZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDAwMkVDNTYxM0MzRjY3RDAw
MDQwRDQ3IC8qIFhNTFRva2VuaXplci5jcHAgKi87IH07CiAJCTAwMDJFQzVBMTNDM0Y2N0QwMDA0
MEQ0NyAvKiBYTUxUb2tlbml6ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDAwMDJFQzU3MTNDM0Y2N0QwMDA0MEQ0NyAvKiBYTUxUb2tlbml6ZXIuaCAq
LzsgfTsKQEAgLTYwLDcgKzYwLDcgQEAKIAkJMDBCOTMxODkxM0JBOERCQzAwMzVBOTQ4IC8qIFhN
TERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwMEI5MzE4MzEzQkE4NjdGMDAzNUE5NDggLyogWE1MRG9jdW1lbnRQ
YXJzZXJMaWJ4bWwyLmNwcCAqLzsgfTsKIAkJMDBCOTMxOEIxM0JBOERDOTAwMzVBOTQ4IC8qIFhN
TERvY3VtZW50UGFyc2VyU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMDBCOTMxODUxM0JBODY3RjAwMzVBOTQ4IC8qIFhNTERvY3VtZW50UGFy
c2VyU2NvcGUuY3BwICovOyB9OwogCQkwMEI5MzE4QzEzQkE4RENDMDAzNUE5NDggLyogWE1MRG9j
dW1lbnRQYXJzZXJTY29wZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMDBCOTMxODYxM0JBODY3RjAwMzVBOTQ4IC8qIFhNTERvY3VtZW50UGFyc2VyU2Nv
cGUuaCAqLzsgfTsKLQkJMDBDNjBFM0YxM0Q3NkQ3RTAwOTJBMjc1IC8qIE1hcmt1cFRva2VuaXpl
cklubGluZU1ldGhvZHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDAwQzYwRTNFMTNENzZEN0UwMDkyQTI3NSAvKiBNYXJrdXBUb2tlbml6ZXJJbmxpbmVN
ZXRob2RzLmggKi87IH07CisJCTAwQzYwRTNGMTNENzZEN0UwMDkyQTI3NSAvKiBNYXJrdXBUb2tl
bml6ZXJJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwMEM2MEUzRTEzRDc2RDdFMDA5MkEyNzUgLyogTWFya3VwVG9rZW5pemVySW5saW5lcy5o
ICovOyB9OwogCQkwMEM2MEU0MjEzRDc5N0FFMDA5MkEyNzUgLyogTWFya3VwVG9rZW5pemVyQmFz
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDBDNjBF
NDExM0Q3OTdBRTAwOTJBMjc1IC8qIE1hcmt1cFRva2VuaXplckJhc2UuaCAqLzsgfTsKIAkJMDBD
QTkzQjIxM0M2NjkxNjAwRjdGRTk1IC8qIE5ld1hNTERvY3VtZW50UGFyc2VyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwMENBOTNCMTEzQzY2OTE2MDBG
N0ZFOTUgLyogTmV3WE1MRG9jdW1lbnRQYXJzZXIuaCAqLzsgfTsKIAkJMDBDQTkzQjUxM0M2Njk3
QzAwRjdGRTk1IC8qIE5ld1hNTERvY3VtZW50UGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDAwQ0E5M0I0MTNDNjY5N0MwMEY3RkU5NSAvKiBO
ZXdYTUxEb2N1bWVudFBhcnNlci5jcHAgKi87IH07CkBAIC03MDk0LDcgKzcwOTQsNyBAQAogLyog
RW5kIFBCWENvcHlGaWxlc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhGaWxl
UmVmZXJlbmNlIHNlY3Rpb24gKi8KLQkJMDAwMjJFNjgxM0NFMUJCQTAwMjgyRDVCIC8qIENoYXJh
Y3RlclJlZmVyZW5jZVBhcnNlcklubGluZU1ldGhvZHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VySW5saW5lTWV0aG9kcy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwMDAyMkU2ODEzQ0UxQkJBMDAyODJENUIgLyogQ2hh
cmFjdGVyUmVmZXJlbmNlUGFyc2VySW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBDaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXJJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTAwMDJFQzU1MTNDM0Y2N0QwMDA0MEQ0NyAvKiBYTUxUb2tlbi5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBYTUxUb2tlbi5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwMDAyRUM1NjEzQzNGNjdEMDAwNDBENDcgLyogWE1MVG9rZW5pemVy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFhNTFRva2VuaXplci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTAwMDJFQzU3MTNDM0Y2N0QwMDA0MEQ0
NyAvKiBYTUxUb2tlbml6ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWE1M
VG9rZW5pemVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03MTA5LDcgKzcxMDks
NyBAQAogCQkwMEI5MzE4MzEzQkE4NjdGMDAzNUE5NDggLyogWE1MRG9jdW1lbnRQYXJzZXJMaWJ4
bWwyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFhNTERvY3VtZW50
UGFyc2VyTGlieG1sMi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTAwQjkzMTg1
MTNCQTg2N0YwMDM1QTk0OCAvKiBYTUxEb2N1bWVudFBhcnNlclNjb3BlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFhNTERvY3VtZW50UGFyc2VyU2NvcGUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwMEI5MzE4NjEzQkE4NjdGMDAzNUE5NDggLyog
WE1MRG9jdW1lbnRQYXJzZXJTY29wZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBYTUxEb2N1bWVudFBhcnNlclNjb3BlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTAwQzYwRTNFMTNENzZEN0UwMDkyQTI3NSAvKiBNYXJrdXBUb2tlbml6ZXJJbmxpbmVNZXRob2Rz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hcmt1cFRva2VuaXplcklubGlu
ZU1ldGhvZHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMDBDNjBFM0UxM0Q3NkQ3
RTAwOTJBMjc1IC8qIE1hcmt1cFRva2VuaXplcklubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gTWFya3VwVG9rZW5pemVySW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwMEM2MEU0MTEzRDc5N0FFMDA5MkEyNzUgLyogTWFya3VwVG9rZW5pemVy
QmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYXJrdXBUb2tlbml6ZXJC
YXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTAwQ0E5M0IxMTNDNjY5MTYwMEY3
RkU5NSAvKiBOZXdYTUxEb2N1bWVudFBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBOZXdYTUxEb2N1bWVudFBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwMENBOTNCNDEzQzY2OTdDMDBGN0ZFOTUgLyogTmV3WE1MRG9jdW1lbnRQYXJzZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTmV3WE1MRG9jdW1lbnRQYXJz
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTQxMzksMTAgKzE0MTM5LDEw
IEBACiAJCTAwQjkzMTgwMTNCQTg2N0YwMDM1QTk0OCAvKiBwYXJzZXIgKi8gPSB7CiAJCQlpc2Eg
PSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTAwMDIyRTY4MTNDRTFCQkEwMDI4MkQ1
QiAvKiBDaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXJJbmxpbmVNZXRob2RzLmggKi8sCisJCQkJMDAw
MjJFNjgxM0NFMUJCQTAwMjgyRDVCIC8qIENoYXJhY3RlclJlZmVyZW5jZVBhcnNlcklubGluZXMu
aCAqLywKIAkJCQkwMEE2MjlDMDEzRDBCRUM3MDA1MEFDNTIgLyogTWFya3VwVG9rZW5CYXNlLmgg
Ki8sCiAJCQkJMDBDNjBFNDExM0Q3OTdBRTAwOTJBMjc1IC8qIE1hcmt1cFRva2VuaXplckJhc2Uu
aCAqLywKLQkJCQkwMEM2MEUzRTEzRDc2RDdFMDA5MkEyNzUgLyogTWFya3VwVG9rZW5pemVySW5s
aW5lTWV0aG9kcy5oICovLAorCQkJCTAwQzYwRTNFMTNENzZEN0UwMDkyQTI3NSAvKiBNYXJrdXBU
b2tlbml6ZXJJbmxpbmVzLmggKi8sCiAJCQkJMDBDQTkzQjQxM0M2Njk3QzAwRjdGRTk1IC8qIE5l
d1hNTERvY3VtZW50UGFyc2VyLmNwcCAqLywKIAkJCQkwMENBOTNCMTEzQzY2OTE2MDBGN0ZFOTUg
LyogTmV3WE1MRG9jdW1lbnRQYXJzZXIuaCAqLywKIAkJCQkwMEQwNDY0ODEzQzREMTQ1MDAzMjZG
Q0MgLyogWE1MQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VyLmNwcCAqLywKQEAgLTIyNTY4LDcgKzIy
NTY4LDcgQEAKIAkJCQlGRDMxNUZGRjEyQjAyNjc2MDBDMUEzNTkgLyogQ2hhbm5lbE1lcmdlck5v
ZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZEMzE2MDAyMTJCMDI2NzYwMEMxQTM1OSAvKiBDaGFu
bmVsU3BsaXR0ZXJOb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQk2NTUwQjZBMDA5OURGMDI3MDA5
MEQ3ODEgLyogQ2hhcmFjdGVyRGF0YS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMDAwMjJFNjkxM0NF
MUJCQTAwMjgyRDVCIC8qIENoYXJhY3RlclJlZmVyZW5jZVBhcnNlcklubGluZU1ldGhvZHMuaCBp
biBIZWFkZXJzICovLAorCQkJCTAwMDIyRTY5MTNDRTFCQkEwMDI4MkQ1QiAvKiBDaGFyYWN0ZXJS
ZWZlcmVuY2VQYXJzZXJJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkMzREEyQTBEMDA2
QzFEMDBFRjZGMjYgLyogQ2hhcnNldERhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUY1NUIzREIy
MTI1MUYxMkQwMDNFRjI2OSAvKiBDaGVja2JveElucHV0VHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTAwQjcyMUExMURFNjQyODAwOEFCOUZGIC8qIENoZWNrZWRJbnQuaCBpbiBIZWFkZXJzICov
LApAQCAtMjQ1MjQsNyArMjQ1MjQsNyBAQAogCQkJCTk3MjhDMzE0MTI2OEU0MzkwMDQxRTg5QiAv
KiBNYXJrdXBBY2N1bXVsYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDBBNjI5QzExM0QwQkVD
NzAwNTBBQzUyIC8qIE1hcmt1cFRva2VuQmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDBDNjBF
NDIxM0Q3OTdBRTAwOTJBMjc1IC8qIE1hcmt1cFRva2VuaXplckJhc2UuaCBpbiBIZWFkZXJzICov
LAotCQkJCTAwQzYwRTNGMTNENzZEN0UwMDkyQTI3NSAvKiBNYXJrdXBUb2tlbml6ZXJJbmxpbmVN
ZXRob2RzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwMEM2MEUzRjEzRDc2RDdFMDA5MkEyNzUgLyog
TWFya3VwVG9rZW5pemVySW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkFCRTcyRjUxMDU5
QzFFQjAwRDk5OUREIC8qIE1hdGhNTEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ0QTI4
QUFDMTJERkI4QUMwMEFFOTIzQiAvKiBNYXRoTUxFbGVtZW50RmFjdG9yeS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRkFCRTcyRjcxMDU5QzFFQjAwRDk5OUREIC8qIE1hdGhNTElubGluZUNvbnRhaW5l
ckVsZW1lbnQuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9wYXJz
ZXIvSFRNTEVudGl0eVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9wYXJzZXIvSFRNTEVudGl0eVBhcnNlci5jcHAJKHJldmlzaW9uIDEzMzk3MykKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxFbnRpdHlQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yOCw3ICsyOCw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSFRNTEVu
dGl0eVBhcnNlci5oIgogCi0jaW5jbHVkZSAiQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VySW5saW5l
TWV0aG9kcy5oIgorI2luY2x1ZGUgIkNoYXJhY3RlclJlZmVyZW5jZVBhcnNlcklubGluZXMuaCIK
ICNpbmNsdWRlICJIVE1MRW50aXR5U2VhcmNoLmgiCiAjaW5jbHVkZSAiSFRNTEVudGl0eVRhYmxl
LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgpJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRva2VuaXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRva2VuaXplci5jcHAJKHJldmlzaW9uIDEzMzk3MykK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUb2tlbml6ZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMiw3ICszMiw3IEBACiAjaW5jbHVkZSAiSFRNTFRva2VuLmgiCiAjaW5jbHVk
ZSAiSFRNTFRyZWVCdWlsZGVyLmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAi
TWFya3VwVG9rZW5pemVySW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIk1hcmt1cFRva2VuaXpl
cklubGluZXMuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgPHd0Zi9B
U0NJSUNUeXBlLmg+CiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL3RyYWNrL1dlYlZUVFRva2VuaXplci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC90cmFjay9XZWJWVFRUb2tlbml6ZXIuY3BwCShyZXZpc2lvbiAxMzM5
NzMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1dlYlZUVFRva2VuaXplci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAKIAogI2luY2x1ZGUgIldlYlZUVFRva2VuaXpl
ci5oIgogCi0jaW5jbHVkZSAiTWFya3VwVG9rZW5pemVySW5saW5lTWV0aG9kcy5oIgorI2luY2x1
ZGUgIk1hcmt1cFRva2VuaXplcklubGluZXMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL0NoYXJhY3RlclJlZmVyZW5jZVBhcnNlcklu
bGluZU1ldGhvZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL0No
YXJhY3RlclJlZmVyZW5jZVBhcnNlcklubGluZU1ldGhvZHMuaAkocmV2aXNpb24gMTMzOTczKQor
KysgU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9DaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXJJbmxp
bmVNZXRob2RzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTczICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEwIEdvb2dsZSwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBDaGFyYWN0ZXJSZWZl
cmVuY2VQYXJzZXJJbmxpbmVNZXRob2RzX2gKLSNkZWZpbmUgQ2hhcmFjdGVyUmVmZXJlbmNlUGFy
c2VySW5saW5lTWV0aG9kc19oCi0KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotaW5saW5lIGJvb2wgaXNIZXhEaWdpdChVQ2hhciBj
YykKLXsKLSAgICByZXR1cm4gKGNjID49ICcwJyAmJiBjYyA8PSAnOScpIHx8IChjYyA+PSAnYScg
JiYgY2MgPD0gJ2YnKSB8fCAoY2MgPj0gJ0EnICYmIGNjIDw9ICdGJyk7Ci19Ci0KLWlubGluZSB2
b2lkIHVuY29uc3VtZUNoYXJhY3RlcnMoU2VnbWVudGVkU3RyaW5nJiBzb3VyY2UsIGNvbnN0IFN0
cmluZ0J1aWxkZXImIGNvbnN1bWVkQ2hhcmFjdGVycykKLXsKLSAgICBpZiAoY29uc3VtZWRDaGFy
YWN0ZXJzLmxlbmd0aCgpID09IDEpCi0gICAgICAgIHNvdXJjZS5wdXNoKGNvbnN1bWVkQ2hhcmFj
dGVyc1swXSk7Ci0gICAgZWxzZSBpZiAoY29uc3VtZWRDaGFyYWN0ZXJzLmxlbmd0aCgpID09IDIp
IHsKLSAgICAgICAgc291cmNlLnB1c2goY29uc3VtZWRDaGFyYWN0ZXJzWzBdKTsKLSAgICAgICAg
c291cmNlLnB1c2goY29uc3VtZWRDaGFyYWN0ZXJzWzFdKTsKLSAgICB9IGVsc2UKLSAgICAgICAg
c291cmNlLnByZXBlbmQoU2VnbWVudGVkU3RyaW5nKFN0cmluZyhjb25zdW1lZENoYXJhY3RlcnMu
Y2hhcmFjdGVycygpLCBjb25zdW1lZENoYXJhY3RlcnMubGVuZ3RoKCkpKSk7Ci19Ci0KLXRlbXBs
YXRlIDx0eXBlbmFtZSBQYXJzZXJGdW5jdGlvbnM+Ci1ib29sIGNvbnN1bWVDaGFyYWN0ZXJSZWZl
cmVuY2UoU2VnbWVudGVkU3RyaW5nJiBzb3VyY2UsIFN0cmluZ0J1aWxkZXImIGRlY29kZWRDaGFy
YWN0ZXIsIGJvb2wmIG5vdEVub3VnaENoYXJhY3RlcnMsIFVDaGFyIGFkZGl0aW9uYWxBbGxvd2Vk
Q2hhcmFjdGVyKQotewotICAgIEFTU0VSVCghYWRkaXRpb25hbEFsbG93ZWRDaGFyYWN0ZXIgfHwg
YWRkaXRpb25hbEFsbG93ZWRDaGFyYWN0ZXIgPT0gJyInIHx8IGFkZGl0aW9uYWxBbGxvd2VkQ2hh
cmFjdGVyID09ICdcJycgfHwgYWRkaXRpb25hbEFsbG93ZWRDaGFyYWN0ZXIgPT0gJz4nKTsKLSAg
ICBBU1NFUlQoIW5vdEVub3VnaENoYXJhY3RlcnMpOwotICAgIEFTU0VSVChkZWNvZGVkQ2hhcmFj
dGVyLmlzRW1wdHkoKSk7Ci0gICAgCi0gICAgZW51bSBFbnRpdHlTdGF0ZSB7Ci0gICAgICAgIElu
aXRpYWwsCi0gICAgICAgIE51bWJlciwKLSAgICAgICAgTWF5YmVIZXhMb3dlckNhc2VYLAotICAg
ICAgICBNYXliZUhleFVwcGVyQ2FzZVgsCi0gICAgICAgIEhleCwKLSAgICAgICAgRGVjaW1hbCwK
LSAgICAgICAgTmFtZWQKLSAgICB9OwotICAgIEVudGl0eVN0YXRlIGVudGl0eVN0YXRlID0gSW5p
dGlhbDsKLSAgICBVQ2hhcjMyIHJlc3VsdCA9IDA7Ci0gICAgU3RyaW5nQnVpbGRlciBjb25zdW1l
ZENoYXJhY3RlcnM7Ci0gICAgCi0gICAgd2hpbGUgKCFzb3VyY2UuaXNFbXB0eSgpKSB7Ci0gICAg
ICAgIFVDaGFyIGNjID0gc291cmNlLmN1cnJlbnRDaGFyKCk7Ci0gICAgICAgIHN3aXRjaCAoZW50
aXR5U3RhdGUpIHsKLSAgICAgICAgY2FzZSBJbml0aWFsOiB7Ci0gICAgICAgICAgICBpZiAoY2Mg
PT0gJ1x4MDknIHx8IGNjID09ICdceDBBJyB8fCBjYyA9PSAnXHgwQycgfHwgY2MgPT0gJyAnIHx8
IGNjID09ICc8JyB8fCBjYyA9PSAnJicpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICAgICAgaWYgKGFkZGl0aW9uYWxBbGxvd2VkQ2hhcmFjdGVyICYmIGNjID09IGFkZGl0
aW9uYWxBbGxvd2VkQ2hhcmFjdGVyKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgICAgIGlmIChjYyA9PSAnIycpIHsKLSAgICAgICAgICAgICAgICBlbnRpdHlTdGF0ZSA9
IE51bWJlcjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGlmICgoY2MgPj0gJ2EnICYmIGNjIDw9ICd6JykgfHwgKGNjID49ICdBJyAmJiBjYyA8PSAn
WicpKSB7Ci0gICAgICAgICAgICAgICAgZW50aXR5U3RhdGUgPSBOYW1lZDsKLSAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgfQotICAgICAgICBjYXNlIE51bWJlcjogewotICAgICAgICAgICAgaWYgKGNjID09
ICd4JykgewotICAgICAgICAgICAgICAgIGVudGl0eVN0YXRlID0gTWF5YmVIZXhMb3dlckNhc2VY
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYg
KGNjID09ICdYJykgewotICAgICAgICAgICAgICAgIGVudGl0eVN0YXRlID0gTWF5YmVIZXhVcHBl
ckNhc2VYOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgaWYgKGNjID49ICcwJyAmJiBjYyA8PSAnOScpIHsKLSAgICAgICAgICAgICAgICBlbnRpdHlT
dGF0ZSA9IERlY2ltYWw7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBzb3VyY2UucHVzaCgnIycpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgTWF5YmVIZXhMb3dlckNhc2VYOiB7Ci0gICAgICAg
ICAgICBpZiAoaXNIZXhEaWdpdChjYykpIHsKLSAgICAgICAgICAgICAgICBlbnRpdHlTdGF0ZSA9
IEhleDsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIHNvdXJjZS5wdXNoKCcjJyk7Ci0gICAgICAgICAgICBzb3VyY2UucHVzaCgneCcpOwotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgTWF5YmVIZXhV
cHBlckNhc2VYOiB7Ci0gICAgICAgICAgICBpZiAoaXNIZXhEaWdpdChjYykpIHsKLSAgICAgICAg
ICAgICAgICBlbnRpdHlTdGF0ZSA9IEhleDsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIHNvdXJjZS5wdXNoKCcjJyk7Ci0gICAgICAgICAgICBz
b3VyY2UucHVzaCgnWCcpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0g
ICAgICAgIGNhc2UgSGV4OiB7Ci0gICAgICAgICAgICBpZiAoY2MgPj0gJzAnICYmIGNjIDw9ICc5
JykKLSAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQgKiAxNiArIGNjIC0gJzAnOwotICAg
ICAgICAgICAgZWxzZSBpZiAoY2MgPj0gJ2EnICYmIGNjIDw9ICdmJykKLSAgICAgICAgICAgICAg
ICByZXN1bHQgPSByZXN1bHQgKiAxNiArIDEwICsgY2MgLSAnYSc7Ci0gICAgICAgICAgICBlbHNl
IGlmIChjYyA+PSAnQScgJiYgY2MgPD0gJ0YnKQotICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJl
c3VsdCAqIDE2ICsgMTAgKyBjYyAtICdBJzsKLSAgICAgICAgICAgIGVsc2UgaWYgKGNjID09ICc7
JykgewotICAgICAgICAgICAgICAgIHNvdXJjZS5hZHZhbmNlQW5kQVNTRVJUKGNjKTsKLSAgICAg
ICAgICAgICAgICBQYXJzZXJGdW5jdGlvbnM6OmNvbnZlcnRUb1VURjE2KFBhcnNlckZ1bmN0aW9u
czo6bGVnYWxFbnRpdHlGb3IocmVzdWx0KSwgZGVjb2RlZENoYXJhY3Rlcik7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKFBhcnNlckZ1bmN0aW9u
czo6YWNjZXB0TWFsZm9ybWVkKCkpIHsKLSAgICAgICAgICAgICAgICBQYXJzZXJGdW5jdGlvbnM6
OmNvbnZlcnRUb1VURjE2KFBhcnNlckZ1bmN0aW9uczo6bGVnYWxFbnRpdHlGb3IocmVzdWx0KSwg
ZGVjb2RlZENoYXJhY3Rlcik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHVuY29uc3VtZUNoYXJhY3RlcnMoc291cmNl
LCBjb25zdW1lZENoYXJhY3RlcnMpOwotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
RGVjaW1hbDogewotICAgICAgICAgICAgaWYgKGNjID49ICcwJyAmJiBjYyA8PSAnOScpCi0gICAg
ICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICogMTAgKyBjYyAtICcwJzsKLSAgICAgICAgICAg
IGVsc2UgaWYgKGNjID09ICc7JykgewotICAgICAgICAgICAgICAgIHNvdXJjZS5hZHZhbmNlQW5k
QVNTRVJUKGNjKTsKLSAgICAgICAgICAgICAgICBQYXJzZXJGdW5jdGlvbnM6OmNvbnZlcnRUb1VU
RjE2KFBhcnNlckZ1bmN0aW9uczo6bGVnYWxFbnRpdHlGb3IocmVzdWx0KSwgZGVjb2RlZENoYXJh
Y3Rlcik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9IGVsc2Ug
aWYgKFBhcnNlckZ1bmN0aW9uczo6YWNjZXB0TWFsZm9ybWVkKCkpIHsKLSAgICAgICAgICAgICAg
ICBQYXJzZXJGdW5jdGlvbnM6OmNvbnZlcnRUb1VURjE2KFBhcnNlckZ1bmN0aW9uczo6bGVnYWxF
bnRpdHlGb3IocmVzdWx0KSwgZGVjb2RlZENoYXJhY3Rlcik7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHVuY29uc3Vt
ZUNoYXJhY3RlcnMoc291cmNlLCBjb25zdW1lZENoYXJhY3RlcnMpOwotICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGNhc2UgTmFtZWQ6IHsKLSAgICAgICAgICAgIHJldHVybiBQYXJzZXJGdW5j
dGlvbnM6OmNvbnN1bWVOYW1lZEVudGl0eShzb3VyY2UsIGRlY29kZWRDaGFyYWN0ZXIsIG5vdEVu
b3VnaENoYXJhY3RlcnMsIGFkZGl0aW9uYWxBbGxvd2VkQ2hhcmFjdGVyLCBjYyk7Ci0gICAgICAg
IH0KLSAgICAgICAgfQotICAgICAgICBjb25zdW1lZENoYXJhY3RlcnMuYXBwZW5kKGNjKTsKLSAg
ICAgICAgc291cmNlLmFkdmFuY2VBbmRBU1NFUlQoY2MpOwotICAgIH0KLSAgICBBU1NFUlQoc291
cmNlLmlzRW1wdHkoKSk7Ci0gICAgbm90RW5vdWdoQ2hhcmFjdGVycyA9IHRydWU7Ci0gICAgdW5j
b25zdW1lQ2hhcmFjdGVycyhzb3VyY2UsIGNvbnN1bWVkQ2hhcmFjdGVycyk7Ci0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi19Ci0KLSNlbmRpZiAvLyBDaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXJJbmxp
bmVNZXRob2RzX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvQ2hhcmFjdGVyUmVm
ZXJlbmNlUGFyc2VySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3htbC9w
YXJzZXIvQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VySW5saW5lcy5oCShyZXZpc2lvbiAxMzMzODkp
CShmcm9tIFNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2Vy
SW5saW5lTWV0aG9kcy5oOjEzMzM4OSkKKysrIFNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvQ2hh
cmFjdGVyUmVmZXJlbmNlUGFyc2VySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUsIEluYy4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VySW5saW5lTWV0aG9kc19oCisjZGVmaW5lIENo
YXJhY3RlclJlZmVyZW5jZVBhcnNlcklubGluZU1ldGhvZHNfaAorCisjaW5jbHVkZSA8d3RmL3Rl
eHQvU3RyaW5nQnVpbGRlci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2lubGluZSBib29s
IGlzSGV4RGlnaXQoVUNoYXIgY2MpCit7CisgICAgcmV0dXJuIChjYyA+PSAnMCcgJiYgY2MgPD0g
JzknKSB8fCAoY2MgPj0gJ2EnICYmIGNjIDw9ICdmJykgfHwgKGNjID49ICdBJyAmJiBjYyA8PSAn
RicpOworfQorCitpbmxpbmUgdm9pZCB1bmNvbnN1bWVDaGFyYWN0ZXJzKFNlZ21lbnRlZFN0cmlu
ZyYgc291cmNlLCBjb25zdCBTdHJpbmdCdWlsZGVyJiBjb25zdW1lZENoYXJhY3RlcnMpCit7Cisg
ICAgaWYgKGNvbnN1bWVkQ2hhcmFjdGVycy5sZW5ndGgoKSA9PSAxKQorICAgICAgICBzb3VyY2Uu
cHVzaChjb25zdW1lZENoYXJhY3RlcnNbMF0pOworICAgIGVsc2UgaWYgKGNvbnN1bWVkQ2hhcmFj
dGVycy5sZW5ndGgoKSA9PSAyKSB7CisgICAgICAgIHNvdXJjZS5wdXNoKGNvbnN1bWVkQ2hhcmFj
dGVyc1swXSk7CisgICAgICAgIHNvdXJjZS5wdXNoKGNvbnN1bWVkQ2hhcmFjdGVyc1sxXSk7Cisg
ICAgfSBlbHNlCisgICAgICAgIHNvdXJjZS5wcmVwZW5kKFNlZ21lbnRlZFN0cmluZyhTdHJpbmco
Y29uc3VtZWRDaGFyYWN0ZXJzLmNoYXJhY3RlcnMoKSwgY29uc3VtZWRDaGFyYWN0ZXJzLmxlbmd0
aCgpKSkpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgUGFyc2VyRnVuY3Rpb25zPgorYm9vbCBj
b25zdW1lQ2hhcmFjdGVyUmVmZXJlbmNlKFNlZ21lbnRlZFN0cmluZyYgc291cmNlLCBTdHJpbmdC
dWlsZGVyJiBkZWNvZGVkQ2hhcmFjdGVyLCBib29sJiBub3RFbm91Z2hDaGFyYWN0ZXJzLCBVQ2hh
ciBhZGRpdGlvbmFsQWxsb3dlZENoYXJhY3RlcikKK3sKKyAgICBBU1NFUlQoIWFkZGl0aW9uYWxB
bGxvd2VkQ2hhcmFjdGVyIHx8IGFkZGl0aW9uYWxBbGxvd2VkQ2hhcmFjdGVyID09ICciJyB8fCBh
ZGRpdGlvbmFsQWxsb3dlZENoYXJhY3RlciA9PSAnXCcnIHx8IGFkZGl0aW9uYWxBbGxvd2VkQ2hh
cmFjdGVyID09ICc+Jyk7CisgICAgQVNTRVJUKCFub3RFbm91Z2hDaGFyYWN0ZXJzKTsKKyAgICBB
U1NFUlQoZGVjb2RlZENoYXJhY3Rlci5pc0VtcHR5KCkpOworICAgIAorICAgIGVudW0gRW50aXR5
U3RhdGUgeworICAgICAgICBJbml0aWFsLAorICAgICAgICBOdW1iZXIsCisgICAgICAgIE1heWJl
SGV4TG93ZXJDYXNlWCwKKyAgICAgICAgTWF5YmVIZXhVcHBlckNhc2VYLAorICAgICAgICBIZXgs
CisgICAgICAgIERlY2ltYWwsCisgICAgICAgIE5hbWVkCisgICAgfTsKKyAgICBFbnRpdHlTdGF0
ZSBlbnRpdHlTdGF0ZSA9IEluaXRpYWw7CisgICAgVUNoYXIzMiByZXN1bHQgPSAwOworICAgIFN0
cmluZ0J1aWxkZXIgY29uc3VtZWRDaGFyYWN0ZXJzOworICAgIAorICAgIHdoaWxlICghc291cmNl
LmlzRW1wdHkoKSkgeworICAgICAgICBVQ2hhciBjYyA9IHNvdXJjZS5jdXJyZW50Q2hhcigpOwor
ICAgICAgICBzd2l0Y2ggKGVudGl0eVN0YXRlKSB7CisgICAgICAgIGNhc2UgSW5pdGlhbDogewor
ICAgICAgICAgICAgaWYgKGNjID09ICdceDA5JyB8fCBjYyA9PSAnXHgwQScgfHwgY2MgPT0gJ1x4
MEMnIHx8IGNjID09ICcgJyB8fCBjYyA9PSAnPCcgfHwgY2MgPT0gJyYnKQorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmIChhZGRpdGlvbmFsQWxsb3dlZENoYXJh
Y3RlciAmJiBjYyA9PSBhZGRpdGlvbmFsQWxsb3dlZENoYXJhY3RlcikKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAoY2MgPT0gJyMnKSB7CisgICAgICAgICAg
ICAgICAgZW50aXR5U3RhdGUgPSBOdW1iZXI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBpZiAoKGNjID49ICdhJyAmJiBjYyA8PSAneicpIHx8IChj
YyA+PSAnQScgJiYgY2MgPD0gJ1onKSkgeworICAgICAgICAgICAgICAgIGVudGl0eVN0YXRlID0g
TmFtZWQ7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBOdW1iZXI6IHsKKyAg
ICAgICAgICAgIGlmIChjYyA9PSAneCcpIHsKKyAgICAgICAgICAgICAgICBlbnRpdHlTdGF0ZSA9
IE1heWJlSGV4TG93ZXJDYXNlWDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmIChjYyA9PSAnWCcpIHsKKyAgICAgICAgICAgICAgICBlbnRpdHlT
dGF0ZSA9IE1heWJlSGV4VXBwZXJDYXNlWDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjYyA+PSAnMCcgJiYgY2MgPD0gJzknKSB7CisgICAg
ICAgICAgICAgICAgZW50aXR5U3RhdGUgPSBEZWNpbWFsOworICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc291cmNlLnB1c2goJyMnKTsKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBjYXNlIE1heWJlSGV4TG93
ZXJDYXNlWDogeworICAgICAgICAgICAgaWYgKGlzSGV4RGlnaXQoY2MpKSB7CisgICAgICAgICAg
ICAgICAgZW50aXR5U3RhdGUgPSBIZXg7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBzb3VyY2UucHVzaCgnIycpOworICAgICAgICAgICAgc291
cmNlLnB1c2goJ3gnKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
ICAgICBjYXNlIE1heWJlSGV4VXBwZXJDYXNlWDogeworICAgICAgICAgICAgaWYgKGlzSGV4RGln
aXQoY2MpKSB7CisgICAgICAgICAgICAgICAgZW50aXR5U3RhdGUgPSBIZXg7CisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzb3VyY2UucHVzaCgn
IycpOworICAgICAgICAgICAgc291cmNlLnB1c2goJ1gnKTsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEhleDogeworICAgICAgICAgICAgaWYgKGNj
ID49ICcwJyAmJiBjYyA8PSAnOScpCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICog
MTYgKyBjYyAtICcwJzsKKyAgICAgICAgICAgIGVsc2UgaWYgKGNjID49ICdhJyAmJiBjYyA8PSAn
ZicpCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICogMTYgKyAxMCArIGNjIC0gJ2En
OworICAgICAgICAgICAgZWxzZSBpZiAoY2MgPj0gJ0EnICYmIGNjIDw9ICdGJykKKyAgICAgICAg
ICAgICAgICByZXN1bHQgPSByZXN1bHQgKiAxNiArIDEwICsgY2MgLSAnQSc7CisgICAgICAgICAg
ICBlbHNlIGlmIChjYyA9PSAnOycpIHsKKyAgICAgICAgICAgICAgICBzb3VyY2UuYWR2YW5jZUFu
ZEFTU0VSVChjYyk7CisgICAgICAgICAgICAgICAgUGFyc2VyRnVuY3Rpb25zOjpjb252ZXJ0VG9V
VEYxNihQYXJzZXJGdW5jdGlvbnM6OmxlZ2FsRW50aXR5Rm9yKHJlc3VsdCksIGRlY29kZWRDaGFy
YWN0ZXIpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfSBlbHNl
IGlmIChQYXJzZXJGdW5jdGlvbnM6OmFjY2VwdE1hbGZvcm1lZCgpKSB7CisgICAgICAgICAgICAg
ICAgUGFyc2VyRnVuY3Rpb25zOjpjb252ZXJ0VG9VVEYxNihQYXJzZXJGdW5jdGlvbnM6OmxlZ2Fs
RW50aXR5Rm9yKHJlc3VsdCksIGRlY29kZWRDaGFyYWN0ZXIpOworICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB1bmNvbnN1
bWVDaGFyYWN0ZXJzKHNvdXJjZSwgY29uc3VtZWRDaGFyYWN0ZXJzKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBjYXNlIERlY2ltYWw6IHsKKyAgICAgICAgICAgIGlmIChjYyA+PSAnMCcg
JiYgY2MgPD0gJzknKQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAqIDEwICsgY2Mg
LSAnMCc7CisgICAgICAgICAgICBlbHNlIGlmIChjYyA9PSAnOycpIHsKKyAgICAgICAgICAgICAg
ICBzb3VyY2UuYWR2YW5jZUFuZEFTU0VSVChjYyk7CisgICAgICAgICAgICAgICAgUGFyc2VyRnVu
Y3Rpb25zOjpjb252ZXJ0VG9VVEYxNihQYXJzZXJGdW5jdGlvbnM6OmxlZ2FsRW50aXR5Rm9yKHJl
c3VsdCksIGRlY29kZWRDaGFyYWN0ZXIpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICAgICAgfSBlbHNlIGlmIChQYXJzZXJGdW5jdGlvbnM6OmFjY2VwdE1hbGZvcm1lZCgp
KSB7CisgICAgICAgICAgICAgICAgUGFyc2VyRnVuY3Rpb25zOjpjb252ZXJ0VG9VVEYxNihQYXJz
ZXJGdW5jdGlvbnM6OmxlZ2FsRW50aXR5Rm9yKHJlc3VsdCksIGRlY29kZWRDaGFyYWN0ZXIpOwor
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICB1bmNvbnN1bWVDaGFyYWN0ZXJzKHNvdXJjZSwgY29uc3VtZWRDaGFyYWN0ZXJz
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIE5hbWVkOiB7CisgICAgICAgICAg
ICByZXR1cm4gUGFyc2VyRnVuY3Rpb25zOjpjb25zdW1lTmFtZWRFbnRpdHkoc291cmNlLCBkZWNv
ZGVkQ2hhcmFjdGVyLCBub3RFbm91Z2hDaGFyYWN0ZXJzLCBhZGRpdGlvbmFsQWxsb3dlZENoYXJh
Y3RlciwgY2MpOworICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgY29uc3VtZWRDaGFyYWN0
ZXJzLmFwcGVuZChjYyk7CisgICAgICAgIHNvdXJjZS5hZHZhbmNlQW5kQVNTRVJUKGNjKTsKKyAg
ICB9CisgICAgQVNTRVJUKHNvdXJjZS5pc0VtcHR5KCkpOworICAgIG5vdEVub3VnaENoYXJhY3Rl
cnMgPSB0cnVlOworICAgIHVuY29uc3VtZUNoYXJhY3RlcnMoc291cmNlLCBjb25zdW1lZENoYXJh
Y3RlcnMpOworICAgIHJldHVybiBmYWxzZTsKK30KKworfQorCisjZW5kaWYgLy8gQ2hhcmFjdGVy
UmVmZXJlbmNlUGFyc2VySW5saW5lTWV0aG9kc19oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS94bWwv
cGFyc2VyL0NoYXJhY3RlclJlZmVyZW5jZVBhcnNlcklubGluZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL0NoYXJhY3RlclJlZmVyZW5jZVBhcnNlcklubGluZXMu
aAkocmV2aXNpb24gMTMzMzg5KQorKysgU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9DaGFyYWN0
ZXJSZWZlcmVuY2VQYXJzZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0LDggKzI0LDgg
QEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYgQ2hhcmFjdGVyUmVmZXJlbmNlUGFy
c2VySW5saW5lTWV0aG9kc19oCi0jZGVmaW5lIENoYXJhY3RlclJlZmVyZW5jZVBhcnNlcklubGlu
ZU1ldGhvZHNfaAorI2lmbmRlZiBDaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXJJbmxpbmVzX2gKKyNk
ZWZpbmUgQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VySW5saW5lc19oCiAKICNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKQEAgLTE3MCw0ICsxNzAsNCBAQCBib29sIGNvbnN1bWVD
aGFyYWN0ZXJSZWZlcmVuY2UoU2VnbWVudGVkCiAKIH0KIAotI2VuZGlmIC8vIENoYXJhY3RlclJl
ZmVyZW5jZVBhcnNlcklubGluZU1ldGhvZHNfaAorI2VuZGlmIC8vIENoYXJhY3RlclJlZmVyZW5j
ZVBhcnNlcklubGluZXNfaApJbmRleDogU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9NYXJrdXBU
b2tlbml6ZXJJbmxpbmVNZXRob2RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUveG1s
L3BhcnNlci9NYXJrdXBUb2tlbml6ZXJJbmxpbmVNZXRob2RzLmgJKHJldmlzaW9uIDEzMzk3MykK
KysrIFNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvTWFya3VwVG9rZW5pemVySW5saW5lTWV0aG9k
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDk1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDA5IFRvcmNoIE1vYmlsZSwgSW5jLiBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KLSAqIENv
cHlyaWdodCAoQykgMjAxMCBHb29nbGUsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBNYXJrdXBUb2tl
bml6ZXJJbmxpbmVNZXRob2RzX2gKLSNkZWZpbmUgTWFya3VwVG9rZW5pemVySW5saW5lTWV0aG9k
c19oCi0KLSNpbmNsdWRlICJTZWdtZW50ZWRTdHJpbmcuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1pbmxpbmUgYm9vbCBpc1Rva2VuaXplcldoaXRlc3BhY2UoVUNoYXIgY2MpCi17Ci0gICAg
cmV0dXJuIGNjID09ICcgJyB8fCBjYyA9PSAnXHgwQScgfHwgY2MgPT0gJ1x4MDknIHx8IGNjID09
ICdceDBDJzsKLX0KLQotaW5saW5lIHZvaWQgYWR2YW5jZVN0cmluZ0FuZEFTU0VSVElnbm9yaW5n
Q2FzZShTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSwgY29uc3QgY2hhciogZXhwZWN0ZWRDaGFyYWN0
ZXJzKQotewotICAgIHdoaWxlICgqZXhwZWN0ZWRDaGFyYWN0ZXJzKQotICAgICAgICBzb3VyY2Uu
YWR2YW5jZUFuZEFTU0VSVElnbm9yaW5nQ2FzZSgqZXhwZWN0ZWRDaGFyYWN0ZXJzKyspOwotfQot
Ci1pbmxpbmUgdm9pZCBhZHZhbmNlU3RyaW5nQW5kQVNTRVJUKFNlZ21lbnRlZFN0cmluZyYgc291
cmNlLCBjb25zdCBjaGFyKiBleHBlY3RlZENoYXJhY3RlcnMpCi17Ci0gICAgd2hpbGUgKCpleHBl
Y3RlZENoYXJhY3RlcnMpCi0gICAgICAgIHNvdXJjZS5hZHZhbmNlQW5kQVNTRVJUKCpleHBlY3Rl
ZENoYXJhY3RlcnMrKyk7Ci19Ci0KLSNpZiBDT01QSUxFUihNU1ZDKQotLy8gV2UgbmVlZCB0byBk
aXNhYmxlIHRoZSAidW5yZWFjaGFibGUgY29kZSIgd2FybmluZyBiZWNhdXNlIHdlIHdhbnQgdG8g
YXNzZXJ0Ci0vLyB0aGF0IHNvbWUgY29kZSBwb2ludHMgYXJlbid0IHJlYWNoZWQgaW4gdGhlIHN0
YXRlIG1hY2hpbmUuCi0jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDcwMikKLSNlbmRpZgotCi0j
ZGVmaW5lIEJFR0lOX1NUQVRFKHByZWZpeCwgc3RhdGVOYW1lKSBjYXNlIHByZWZpeDo6c3RhdGVO
YW1lOiBzdGF0ZU5hbWU6Ci0jZGVmaW5lIEVORF9TVEFURSgpIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OyBicmVhazsKLQotLy8gV2UgdXNlIHRoaXMgbWFjcm8gd2hlbiB0aGUgSFRNTDUgc3BlYyBzYXlz
ICJyZWNvbnN1bWUgdGhlIGN1cnJlbnQgaW5wdXQKLS8vIGNoYXJhY3RlciBpbiB0aGUgPG11bWJs
ZT4gc3RhdGUuIgotI2RlZmluZSBSRUNPTlNVTUVfSU4ocHJlZml4LCBzdGF0ZU5hbWUpICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGRvIHsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
ICAgICBtX3N0YXRlID0gcHJlZml4OjpzdGF0ZU5hbWU7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgICAgICBnb3RvIHN0YXRlTmFtZTsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gd2hpbGUgKGZhbHNl
KQotCi0vLyBXZSB1c2UgdGhpcyBtYWNybyB3aGVuIHRoZSBIVE1MNSBzcGVjIHNheXMgImNvbnN1
bWUgdGhlIG5leHQgaW5wdXQKLS8vIGNoYXJhY3RlciAuLi4gYW5kIHN3aXRjaCB0byB0aGUgPG11
bWJsZT4gc3RhdGUuIgotI2RlZmluZSBBRFZBTkNFX1RPKHByZWZpeCwgc3RhdGVOYW1lKSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGRvIHsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgICAgICBtX3N0YXRlID0gcHJlZml4OjpzdGF0ZU5hbWU7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgICAgICBpZiAoIW1faW5wdXRTdHJlYW1QcmVwcm9jZXNz
b3IuYWR2YW5jZShzb3VyY2UpKSAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgcmV0
dXJuIGhhdmVCdWZmZXJlZENoYXJhY3RlclRva2VuKCk7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgICAgICBjYyA9IG1faW5wdXRTdHJlYW1QcmVwcm9jZXNzb3IubmV4dElucHV0Q2hh
cmFjdGVyKCk7ICAgICAgICAgICAgICAgXAotICAgICAgICBnb3RvIHN0YXRlTmFtZTsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gd2hp
bGUgKGZhbHNlKQotCi0vLyBTb21ldGltZXMgdGhlcmUncyBtb3JlIGNvbXBsaWNhdGVkIGxvZ2lj
IGluIHRoZSBzcGVjIHRoYXQgc2VwYXJhdGVzIHdoZW4KLS8vIHdlIGNvbnN1bWUgdGhlIG5leHQg
aW5wdXQgY2hhcmFjdGVyIGFuZCB3aGVuIHdlIHN3aXRjaCB0byBhIHBhcnRpY3VsYXIKLS8vIHN0
YXRlLiBXZSBoYW5kbGUgdGhvc2UgY2FzZXMgYnkgYWR2YW5jaW5nIHRoZSBzb3VyY2UgZGlyZWN0
bHkgYW5kIHVzaW5nCi0vLyB0aGlzIG1hY3JvIHRvIHN3aXRjaCB0byB0aGUgaW5kaWNhdGVkIHN0
YXRlLgotI2RlZmluZSBTV0lUQ0hfVE8ocHJlZml4LCBzdGF0ZU5hbWUpICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBt
X3N0YXRlID0gcHJlZml4OjpzdGF0ZU5hbWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgICAgICBpZiAoc291cmNlLmlzRW1wdHkoKSB8fCAhbV9pbnB1dFN0cmVh
bVByZXByb2Nlc3Nvci5wZWVrKHNvdXJjZSkpICAgXAotICAgICAgICAgICAgcmV0dXJuIGhhdmVC
dWZmZXJlZENoYXJhY3RlclRva2VuKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
ICAgICBjYyA9IG1faW5wdXRTdHJlYW1QcmVwcm9jZXNzb3IubmV4dElucHV0Q2hhcmFjdGVyKCk7
ICAgICAgICAgICAgICAgXAotICAgICAgICBnb3RvIHN0YXRlTmFtZTsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gd2hpbGUgKGZhbHNl
KQotCi19Ci0KLSNlbmRpZiAvLyBNYXJrdXBUb2tlbml6ZXJJbmxpbmVNZXRob2RzX2gKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvTWFya3VwVG9rZW5pemVySW5saW5lcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvTWFya3VwVG9rZW5pemVySW5saW5l
cy5oCShyZXZpc2lvbiAxMzMzODkpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvTWFy
a3VwVG9rZW5pemVySW5saW5lTWV0aG9kcy5oOjEzMzM4OSkKKysrIFNvdXJjZS9XZWJDb3JlL3ht
bC9wYXJzZXIvTWFya3VwVG9rZW5pemVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRz
IFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1vYmlsZSwgSW5jLiBodHRw
Oi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUsIElu
Yy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBNYXJrdXBUb2tlbml6ZXJJbmxpbmVNZXRob2RzX2gKKyNkZWZp
bmUgTWFya3VwVG9rZW5pemVySW5saW5lTWV0aG9kc19oCisKKyNpbmNsdWRlICJTZWdtZW50ZWRT
dHJpbmcuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitpbmxpbmUgYm9vbCBpc1Rva2VuaXpl
cldoaXRlc3BhY2UoVUNoYXIgY2MpCit7CisgICAgcmV0dXJuIGNjID09ICcgJyB8fCBjYyA9PSAn
XHgwQScgfHwgY2MgPT0gJ1x4MDknIHx8IGNjID09ICdceDBDJzsKK30KKworaW5saW5lIHZvaWQg
YWR2YW5jZVN0cmluZ0FuZEFTU0VSVElnbm9yaW5nQ2FzZShTZWdtZW50ZWRTdHJpbmcmIHNvdXJj
ZSwgY29uc3QgY2hhciogZXhwZWN0ZWRDaGFyYWN0ZXJzKQoreworICAgIHdoaWxlICgqZXhwZWN0
ZWRDaGFyYWN0ZXJzKQorICAgICAgICBzb3VyY2UuYWR2YW5jZUFuZEFTU0VSVElnbm9yaW5nQ2Fz
ZSgqZXhwZWN0ZWRDaGFyYWN0ZXJzKyspOworfQorCitpbmxpbmUgdm9pZCBhZHZhbmNlU3RyaW5n
QW5kQVNTRVJUKFNlZ21lbnRlZFN0cmluZyYgc291cmNlLCBjb25zdCBjaGFyKiBleHBlY3RlZENo
YXJhY3RlcnMpCit7CisgICAgd2hpbGUgKCpleHBlY3RlZENoYXJhY3RlcnMpCisgICAgICAgIHNv
dXJjZS5hZHZhbmNlQW5kQVNTRVJUKCpleHBlY3RlZENoYXJhY3RlcnMrKyk7Cit9CisKKyNpZiBD
T01QSUxFUihNU1ZDKQorLy8gV2UgbmVlZCB0byBkaXNhYmxlIHRoZSAidW5yZWFjaGFibGUgY29k
ZSIgd2FybmluZyBiZWNhdXNlIHdlIHdhbnQgdG8gYXNzZXJ0CisvLyB0aGF0IHNvbWUgY29kZSBw
b2ludHMgYXJlbid0IHJlYWNoZWQgaW4gdGhlIHN0YXRlIG1hY2hpbmUuCisjcHJhZ21hIHdhcm5p
bmcoZGlzYWJsZTogNDcwMikKKyNlbmRpZgorCisjZGVmaW5lIEJFR0lOX1NUQVRFKHByZWZpeCwg
c3RhdGVOYW1lKSBjYXNlIHByZWZpeDo6c3RhdGVOYW1lOiBzdGF0ZU5hbWU6CisjZGVmaW5lIEVO
RF9TVEFURSgpIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyBicmVhazsKKworLy8gV2UgdXNlIHRoaXMg
bWFjcm8gd2hlbiB0aGUgSFRNTDUgc3BlYyBzYXlzICJyZWNvbnN1bWUgdGhlIGN1cnJlbnQgaW5w
dXQKKy8vIGNoYXJhY3RlciBpbiB0aGUgPG11bWJsZT4gc3RhdGUuIgorI2RlZmluZSBSRUNPTlNV
TUVfSU4ocHJlZml4LCBzdGF0ZU5hbWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBtX3N0YXRlID0gcHJlZml4OjpzdGF0
ZU5hbWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBn
b3RvIHN0YXRlTmFtZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgIH0gd2hpbGUgKGZhbHNlKQorCisvLyBXZSB1c2UgdGhpcyBtYWNybyB3
aGVuIHRoZSBIVE1MNSBzcGVjIHNheXMgImNvbnN1bWUgdGhlIG5leHQgaW5wdXQKKy8vIGNoYXJh
Y3RlciAuLi4gYW5kIHN3aXRjaCB0byB0aGUgPG11bWJsZT4gc3RhdGUuIgorI2RlZmluZSBBRFZB
TkNFX1RPKHByZWZpeCwgc3RhdGVOYW1lKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBtX3N0YXRlID0gcHJlZml4Ojpz
dGF0ZU5hbWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg
ICBpZiAoIW1faW5wdXRTdHJlYW1QcmVwcm9jZXNzb3IuYWR2YW5jZShzb3VyY2UpKSAgICAgICAg
ICAgICAgICAgICAgXAorICAgICAgICAgICAgcmV0dXJuIGhhdmVCdWZmZXJlZENoYXJhY3RlclRv
a2VuKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBjYyA9IG1faW5wdXRT
dHJlYW1QcmVwcm9jZXNzb3IubmV4dElucHV0Q2hhcmFjdGVyKCk7ICAgICAgICAgICAgICAgXAor
ICAgICAgICBnb3RvIHN0YXRlTmFtZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKGZhbHNlKQorCisvLyBTb21ldGltZXMg
dGhlcmUncyBtb3JlIGNvbXBsaWNhdGVkIGxvZ2ljIGluIHRoZSBzcGVjIHRoYXQgc2VwYXJhdGVz
IHdoZW4KKy8vIHdlIGNvbnN1bWUgdGhlIG5leHQgaW5wdXQgY2hhcmFjdGVyIGFuZCB3aGVuIHdl
IHN3aXRjaCB0byBhIHBhcnRpY3VsYXIKKy8vIHN0YXRlLiBXZSBoYW5kbGUgdGhvc2UgY2FzZXMg
YnkgYWR2YW5jaW5nIHRoZSBzb3VyY2UgZGlyZWN0bHkgYW5kIHVzaW5nCisvLyB0aGlzIG1hY3Jv
IHRvIHN3aXRjaCB0byB0aGUgaW5kaWNhdGVkIHN0YXRlLgorI2RlZmluZSBTV0lUQ0hfVE8ocHJl
Zml4LCBzdGF0ZU5hbWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgICAgICBtX3N0YXRlID0gcHJlZml4OjpzdGF0ZU5hbWU7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoc291
cmNlLmlzRW1wdHkoKSB8fCAhbV9pbnB1dFN0cmVhbVByZXByb2Nlc3Nvci5wZWVrKHNvdXJjZSkp
ICAgXAorICAgICAgICAgICAgcmV0dXJuIGhhdmVCdWZmZXJlZENoYXJhY3RlclRva2VuKCk7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBjYyA9IG1faW5wdXRTdHJlYW1QcmVw
cm9jZXNzb3IubmV4dElucHV0Q2hhcmFjdGVyKCk7ICAgICAgICAgICAgICAgXAorICAgICAgICBn
b3RvIHN0YXRlTmFtZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgIH0gd2hpbGUgKGZhbHNlKQorCit9CisKKyNlbmRpZiAvLyBNYXJrdXBU
b2tlbml6ZXJJbmxpbmVNZXRob2RzX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIv
TWFya3VwVG9rZW5pemVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3ht
bC9wYXJzZXIvTWFya3VwVG9rZW5pemVySW5saW5lcy5oCShyZXZpc2lvbiAxMzMzODkpCisrKyBT
b3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL01hcmt1cFRva2VuaXplcklubGluZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjUsOCArMjUsOCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVm
IE1hcmt1cFRva2VuaXplcklubGluZU1ldGhvZHNfaAotI2RlZmluZSBNYXJrdXBUb2tlbml6ZXJJ
bmxpbmVNZXRob2RzX2gKKyNpZm5kZWYgTWFya3VwVG9rZW5pemVySW5saW5lc19oCisjZGVmaW5l
IE1hcmt1cFRva2VuaXplcklubGluZXNfaAogCiAjaW5jbHVkZSAiU2VnbWVudGVkU3RyaW5nLmgi
CiAKQEAgLTkyLDQgKzkyLDQgQEAgaW5saW5lIHZvaWQgYWR2YW5jZVN0cmluZ0FuZEFTU0VSVChT
ZWdtZQogCiB9CiAKLSNlbmRpZiAvLyBNYXJrdXBUb2tlbml6ZXJJbmxpbmVNZXRob2RzX2gKKyNl
bmRpZiAvLyBNYXJrdXBUb2tlbml6ZXJJbmxpbmVzX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3ht
bC9wYXJzZXIvWE1MQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTENoYXJhY3RlclJlZmVyZW5jZVBhcnNlci5jcHAJ
KHJldmlzaW9uIDEzMzk3MykKKysrIFNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MQ2hhcmFj
dGVyUmVmZXJlbmNlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAog
CiB1c2luZyBuYW1lc3BhY2UgV1RGOwogCi0jaW5jbHVkZSAiQ2hhcmFjdGVyUmVmZXJlbmNlUGFy
c2VySW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkNoYXJhY3RlclJlZmVyZW5jZVBhcnNlcklu
bGluZXMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS94
bWwvcGFyc2VyL1hNTFRva2VuaXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
eG1sL3BhcnNlci9YTUxUb2tlbml6ZXIuY3BwCShyZXZpc2lvbiAxMzM5NzMpCisrKyBTb3VyY2Uv
V2ViQ29yZS94bWwvcGFyc2VyL1hNTFRva2VuaXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4
LDcgKzI4LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJYTUxUb2tlbml6ZXIu
aCIKIAotI2luY2x1ZGUgIk1hcmt1cFRva2VuaXplcklubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRl
ICJNYXJrdXBUb2tlbml6ZXJJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIK
ICNpbmNsdWRlICJYTUxDaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXIuaCIKICNpbmNsdWRlICJYTUxU
b2tlbi5oIgo=
</data>
<flag name="review"
          id="187749"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>